我正在创建一些模板类,现在希望将它们相互转换。我写了函数,现在想知道它有多糟糕:
template<class ConnectionType>
class CONNECTION
{
public:
ConnectionType weight;
template<class FinalType> CONNECTION<FinalType>* ConvertTo()
{
CONNECTION<FinalType>* temp = new CONNECTION<FinalType>( );
temp->weight = (FinalType)this->weight;
delete this;
return temp;
}
virtual ~CONNECTION() {}
};您可以看到Iam创建新对象、复制数据、删除当前对象并返回新对象。那么,现在是否可以先调用、删除这个对象,然后实现对象,然后返回由销毁对象的方法创建的返回对象?
发布于 2014-06-22 02:11:05
有几件事情使“删除”成为一个坏主意,但其中之一是有人迟早会做这样的事情:
Connection<Foo> foo;
Connection<Bar> * bar = foo.ConnectTo<Bar>(); // oops!..。此时,ConnectTo()将尝试删除foo,并且由于foo没有被分配给新的、未定义的行为,崩溃和普遍的不快乐也会随之而来。
发布于 2015-08-28 15:38:14
THis是个坏主意。您最好学习使用引用计数指针(shared_ptr在boost中,或者其他后来的标准名称--我现在正在消隐)。一旦你这样做,你的编码风格将被改变,生活变得干净,简单和可靠。你永远不要再编码新的或删除,猫咕噜,羊羔游戏,.
别说开玩笑了--这真是个很好的成语。
在您的例子中,当“旧”连接对象不再引用时,它将被简单地删除。
https://stackoverflow.com/questions/24345771
复制相似问题