首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除此对象,然后返回已创建的对象。

删除此对象,然后返回已创建的对象。
EN

Stack Overflow用户
提问于 2014-06-21 20:55:01
回答 2查看 93关注 0票数 1

我正在创建一些模板类,现在希望将它们相互转换。我写了函数,现在想知道它有多糟糕:

代码语言:javascript
复制
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创建新对象、复制数据、删除当前对象并返回新对象。那么,现在是否可以先调用、删除这个对象,然后实现对象,然后返回由销毁对象的方法创建的返回对象?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-22 02:11:05

有几件事情使“删除”成为一个坏主意,但其中之一是有人迟早会做这样的事情:

代码语言:javascript
复制
Connection<Foo> foo;
Connection<Bar> * bar = foo.ConnectTo<Bar>();  // oops!

..。此时,ConnectTo()将尝试删除foo,并且由于foo没有被分配给新的、未定义的行为,崩溃和普遍的不快乐也会随之而来。

票数 2
EN

Stack Overflow用户

发布于 2015-08-28 15:38:14

THis是个坏主意。您最好学习使用引用计数指针(shared_ptr在boost中,或者其他后来的标准名称--我现在正在消隐)。一旦你这样做,你的编码风格将被改变,生活变得干净,简单和可靠。你永远不要再编码新的或删除,猫咕噜,羊羔游戏,.

别说开玩笑了--这真是个很好的成语。

在您的例子中,当“旧”连接对象不再引用时,它将被简单地删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24345771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档