我有类似这样的代码:
MyClass createInstance()
{
MyClass t;
t.setValue(20);
return t;
}
int main()
{
MyClass primary;
primary.setValue(30);
primary = createInstance();
}
我的问题是createInstance()
创建了一个临时的,稍后会被删除。就我而言,它不使用 RVO,我必须使用三法则(因为我的类有一个指向数据成员的指针),并且我必须对兆字节数据进行深度复制。我想知道防止临时创建的最佳方法是什么?
此外,我将此 MyClass 作为另一个类的成员,我想防止指针的间接性以及在父类的析构函数中手动删除它的要求。
例如,我可以改用指针(这需要我显式调用析构函数:
MyClass *createInstance()
{
MyClass *t = new MyClass();
t->setValue(20);
return t;
}
int main()
{
MyClass *primary = new MyClass();
primary->setValue(30);
delete primary;
primary = createInstance();
}
或者我可以使用成员函数:
void MyClass::createNewInstance()
{
~MyClass();
init();
setValue(20);
}
int main()
{
MyClass primary;
primary.setValue(30);
primary.createNewInstance();
}
或者我可以一般禁止分配/复制:
void MyClass::createInstance()
{
setValue(20);
}
int main()
{
MyClass *primary = new MyClass();
primary->setValue(30);
delete primary;
primary = new MyClass();
primary->createInstance();
}
我错过了什么吗?