在此SO question声明此构造可防止实例的堆栈分配。
class FS_Only {
~FS_Only() = delete; // disallow stack allocation
};
我的问题是,它如何防止分配?我了解,无论是显式还是隐式,都无法删除此实例。但我认为,这会分别导致内存泄漏或运行时错误。
编译器是否足够聪明,可以解决这个问题并引发编译器错误?还有为什么需要这个?
最佳答案
具有自动存储持续时间的变量(即局部变量)的析构函数需要在变量的生命周期结束时运行。如果没有可访问的析构函数,编译器将拒绝编译分配此类变量的代码。
基本上,“堆栈分配”(顺便说一下,术语选择不准确)和自由存储分配之间的区别在于,使用局部变量的构造函数/析构函数调用总是成对出现,而使用自由存储分配,您可以构造一个没有永远破坏它。因此,通过阻止对析构函数的访问,您的代码无法分配该类型的局部变量(如果构造函数运行,析构函数也必须运行,但没有析构函数,因此程序被拒绝)。
关于c++ - 析构函数上的 =delete 如何防止堆栈分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18847739/