析构函数上的= delete如何防止堆栈分配?

诺瓦乔

在这个SO问题中,该结构阻止了实例的堆栈分配。

class FS_Only {
    ~FS_Only() = delete;  // disallow stack allocation
};

我的问题是,它如何阻止分配?我了解,无法显式或隐式删除此实例。但是我认为,这将分别导致内存泄漏或运行时错误。

编译器是否足够聪明以解决此问题并引发编译器错误?还有为什么需要这个呢?

乔恩

具有自动存储持续时间的变量(即本地变量)的析构函数将在变量的生命周期结束时运行。如果没有可访问的析构函数,则编译器将拒绝编译分配此类变量的代码。

基本上,“堆栈分配”(顺便说一句,术语的不正确选择)与免费存储分配之间的区别在于,使用局部变量时,构造函数/析构函数调用总是成对出现,而使用免费存储分配,则可以构造对象而不会破坏对象。因此,通过阻止访问析构函数,您的代码将无法分配该类型的局部变量(如果构造函数运行,则析构函数也必须运行,但是没有析构函数,因此程序被拒绝)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

delete []是否调用析构函数?

来自分类Dev

您是否在C ++中的析构函数中调用delete?

来自分类Dev

防止析构函数被手动调用

来自分类Dev

如何跟踪析构函数在哪里被调用-C ++

来自分类Dev

使用delete调用析构函数

来自分类Dev

如何从析构函数调用const成员函数

来自分类Dev

如何定义析构函数?

来自分类Dev

使用Vector创建对象时如何调用析构函数

来自分类Dev

测试类的析构函数是否分配了指针?

来自分类Dev

Singleton:析构函数如何被两次调用?

来自分类Dev

C ++析构函数中的堆栈溢出

来自分类Dev

如何构造具有删除的析构函数的动态对象?

来自分类Dev

如何从成员析构函数中捕获异常

来自分类Dev

用于堆栈分配对象的C ++虚拟析构函数内联

来自分类Dev

如何在链表中对析构函数进行递归调用?

来自分类Dev

如何在SystemC中声明析构函数?

来自分类Dev

在C ++中,当delete调用析构函数时,析构函数的主体是否在释放内存之前触发?

来自分类Dev

您如何测试是否将调用Ruby析构函数?

来自分类Dev

如何为指针分配析构函数?

来自分类Dev

如何强制定义析构函数

来自分类Dev

如何指定析构函数调用的顺序?

来自分类Dev

析构函数如何工作?

来自分类Dev

取消运算符delete []中的析构函数调用

来自分类Dev

为什么在复制分配期间调用析构函数?

来自分类Dev

C ++分配和析构函数

来自分类Dev

返回的结构调用它自己的析构函数,该析构函数销毁分配的对象

来自分类Dev

动态内存分配,指针成员和析构函数

来自分类Dev

构造函数和析构函数如何工作?

来自分类Dev

关于析构函数调用,堆栈展开如何工作?

Related 相关文章

热门标签

归档