یکی دیگه از جا هایی که باید حتما این 2 تا رو overload کنی وقت هایی هست که داخل constructor از new استفاده کردی
مثلا این کد به مشکل می خوره چون موقع صدا زدن = فقط آدرس وکتور کپی میشه داخل وکتور اون یکی کلاس پس وقتی که شی c1 پاک بشه یا محتویات وکتور داخلش عوض بشه شی c2 هم مقادریر وکتور داخلش عوض میشه و یا پاک میشه
#include <iostream>
#include <vector>
using namespace std;
class MyClass
{
public:
MyClass()
{
variables=new vector<int>({1,2,3});
}
~MyClass()
{
delete variables;
}
vector<int> *variables;
};
int main()
{
MyClass *c1=new MyClass();
MyClass c2=*c1;
delete c1;
cout<< (*(c2.variables))[2];/////ERROR
return 0;
}
کد درست تر :
#include <iostream>
#include <vector>
using namespace std;
class MyClass
{
public:
MyClass()
{
variables=new vector<int>({1,2,3});
}
MyClass& operator = (const MyClass& other)
{
variables->clear();
variables->insert(variables->end(),other.variables->begin(),other.variables->end());
return *this;
}
MyClass(const MyClass& other)
{
variables=new vector<int>();
variables->insert(variables->begin(),other.variables->begin(),other.variables->end());
}
~MyClass()
{
delete variables;
}
vector<int> *variables;
};
int main()
{
MyClass *c1=new MyClass();
MyClass c2=*c1;//copy constructor
delete c1;
cout<<(*c2.variables)[2];
return 0;
}