Написать конструктор копирования

Нужно написать конструктор копирования для класса, чтоб правильно присваивались значения в основной части кода

int main()
{
Str a = Str();
char *z = "abc"; //здесь компилятор ругается на указатель, не хочет ему ничего присваивать, делаю константой - не работает копирование
Str b = Str(z);
Str c(10);
return 0;}

Класс содержит только строку str Моя попытка написать конструктор:

class Str    
{
char *str;
public:
Str()
{
    *str = '---';
};
Str(char* str)
{
    this->str = str;
}
~Str() {

}
Str(const Str & ref_str) 
{
    str = ref_str.str;
}

};

Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Всё отлично работает с полем типа const char *: конструктор без аргументов, конструктор от const char *, конструктор копирования (его создаёт компилятор):

#include <iostream>

class Str    
{
private:
    const char *str;
public:
    Str() : str("---") {
    }
    explicit Str(const char *str) : str(str) {
    }
    friend std::ostream &operator <<(std::ostream &os, const Str &s);
};

std::ostream &operator <<(std::ostream &os, const Str &s) {
    return os << s.str;
}

int main() {
    Str s1;
    std::cout << s1 << '\n';
    Str s2("Hi!");
    std::cout << s2 << '\n';
    s2 = s1;
    std::cout << s2 << '\n';
}
$ g++ -std=c++17 -pedantic -Wall -Wextra -Werror -O3 temp.cpp && ./a.out 
---
Hi!
---
→ Ссылка