删除它,然后返回创建的对象
Delete this and then returning created object
我正在创建一些模板类,现在要将它们相互转换。我写了一个函数,现在想知道它有多糟糕:
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() {}
};
如你所见,我创建新对象,复制数据,删除当前对象并返回新对象。那么现在是否可以先调用delete this然后在对象被释放后返回由destroy 1的方法创建的返回对象?
有几件事使'delete this'成为一个坏主意,但其中之一是迟早有人会做这样的事情:
Connection<Foo> foo;
Connection<Bar> * bar = foo.ConnectTo<Bar>(); // oops!
…此时ConnectTo()将尝试删除foo,并且由于foo没有分配新的,未定义的行为和崩溃和一般的不愉快将随之而来。
这是个坏主意。您最好学习使用引用计数指针(boost中的shared_ptr或后来的标准调用它们-我现在正在空白)。一旦你这样做了,你的编码风格就会改变,生活就会变得干净、简单和可靠。你再也不写新代码或删除代码了,小猫呜呜叫,羊羔嬉闹,…
不开玩笑了,这确实是一个非常值得学习的成语
在你的例子中,当"旧"连接对象不再被引用时,它将被删除。
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 创建对象并防止被破坏
- 在C++中,友元类可以从友元类创建对象吗
- 只在堆中创建C++对象
- 创建用户定义的复制构造函数时无法创建对象