首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用新位置时删除此选项的替代方法

使用新位置时删除此选项的替代方法
EN

Stack Overflow用户
提问于 2016-04-04 13:52:49
回答 3查看 985关注 0票数 2

我读过这里

只要你小心,一个物体自杀是可以的(而不是邪恶的)(删除这个)。下面是我如何定义“小心”的方法:您必须绝对100%地肯定这个对象是通过new分配的(不是通过new[]分配的,也不是通过放置新的对象,也不是通过在堆栈上放置新的本地对象,也不是通过命名空间范围/全局,也不是另一个对象的成员;而是由普通的新对象分配的)。

如果我使用新的安置,我有什么选择?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-04 14:13:39

separate用于分隔内存分配和对象生存期,因此通常会显式调用析构函数:

代码语言:javascript
运行
复制
myobj->~myclass();

并在以后释放内存,或者继续将内存用于其他目的。

票数 3
EN

Stack Overflow用户

发布于 2016-04-04 14:22:51

新放置意味着对象不在堆上分配,而是由用户为其存储提供内存。在这种情况下,删除将尝试释放一个非堆块,这通常是致命的.

没有要删除的内容,因此必须执行显式析构函数调用:

代码语言:javascript
运行
复制
struct SomeClass {
    SomeClass() { std::cout << "Constuctor\n"; }
    ~SomeClass() { std::cout << "Destructor\n"; }
};

std::aligned_storage<sizeof(SomeClass), alignof(SomeClass)>::type storage;
new(&storage) SomeClass();
reinterpret_cast< SomeClass* >(&storage) -> ~SomeClass();

在一般情况下,只使用this指针是不够的。

票数 0
EN

Stack Overflow用户

发布于 2016-04-04 14:36:03

自从std::shared_ptrstd::unique_ptr出现以来,编写管理自己生命周期的对象已经变得不必要(而且不受欢迎)。

好的c++表单要求一个对象有一个责任。您的对象的责任是它所执行的工作。智能指针的职责是管理其生命周期。

还有一个需要delete this的场景--当为旧API编写对象时,需要进行侵入性引用计数。

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

https://stackoverflow.com/questions/36404622

复制
相关文章

相似问题

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