其他分享
首页 > 其他分享> > c – 析构函数中的= delete如何阻止分配?

c – 析构函数中的= delete如何阻止分配?

作者:互联网

在此SO question中声明此构造可防止实例的堆栈分配.

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

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

编译器是否足够聪明以排除这种情况并引发编译器错误?还有为什么需要这个呢?

解决方法:

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

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

标签:c,c11,delete-operator
来源: https://codeday.me/bug/20190926/1822064.html