问题描述
|
我想允许我的Class1通过类型转换运算符转换为Class2:
class Class1 {
public:
operator Class2() const {
//....
}
}
但是,如果我在运算符实现中创建Class2对象,则很可能不会被调用方删除。那么实现这种功能的最佳方法是什么?
解决方法
如果您像这样疯狂地进行操作,则只需要删除即可:
operator Class2() const
{
Class2 *p = new Class2();
...
return *p;
}
但是,以下方法可以:
operator Class2() const
{
Class2 c2;
...
return c2;
}
, 您不应在堆上分配内存,而应在堆栈中创建Class2。然后它将在函数退出时销毁。
, 你应该做这样的事情
operator Class2() const
{
Class2 tmp;
...
return tmp;
}
那你有这样的话
Class1 c1;
Class2 c2 = c1;
for5ѭ的内存将在堆栈中分配,然后将调用Class2
的复制构造函数将to5ѭ复制到c2
,然后将tmp
的析构函数称为自动变量。