Всем, добрый день! Возник следующий вопрос при изучении с++:
имеется класс Sea:
class Sea
{
private:
char* sea_name;
int max_depth;
double square;
public:
void SetSeaName(const char* p)
{
if (strlen(p) != strlen(this->sea_name) || this->sea_name == nullptr)
{
delete[] this->sea_name;
this->sea_name = new char[strlen(p) + 1];
}
strcpy(this->sea_name, p);
}
Sea(const char* arr, int d, double s) :max_depth(d), square(s)
{
this->sea_name = new char[strlen(arr) + 1];
strcpy(this->sea_name, arr);
}
Sea(int d, double s) :Sea("cde", d, s)
{
}
~Sea()
{
delete[] sea_name;
cout << "Destructor" << endl;
}
Sea()
{
this->sea_name = new char[4];
strcpy(this->sea_name, "abc");
this->max_depth = 1000;
this->square = 100000;
}
//Конструктор копирования
Sea(const Sea& param):sea_name(param.sea_name),max_depth(param.max_depth),square(param.square)
{
cout << "Copy Constructor is worked!" << endl;
}
};
- он содержит в себе несколько конструкторов, в том числе и конструктор копирования.
В main создаю несколько экземпляров класса:
int main()
{
setlocale(LC_ALL, NULL);
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
{
Sea s1();
Sea s2("aaaa", 1000, 2000.5);
Sea s3(1000, 200.5);
Sea s4=s3;
Sea s5(100,100);
}
Sea* s4 = new Sea();
s4->~Sea();
system("pause");
return 0;
}
Проблема возникает вот здесь:
Sea s4=s3;
- при вызове деструктора s4. Не могу понять в чем проблема (Вернее догадываюсь, что проблема в том, что у s3 - деструктор - вызывается дважды, но не знаю как этого избежать - т.к здесь он так же вызовется
Sea s3(1000, 200.5);
). Сколько смотрел примеров на просторах интернета - во всех, примерно так же и никаких проблем не возникает.
Подскажите пожалуйста. Заранее - спасибо!