在这个SO问题中,该结构阻止了实例的堆栈分配。
class FS_Only {
~FS_Only() = delete; // disallow stack allocation
};
我的问题是,它如何阻止分配?我了解,无法显式或隐式删除此实例。但是我认为,这将分别导致内存泄漏或运行时错误。
编译器是否足够聪明以解决此问题并引发编译器错误?还有为什么需要这个呢?
具有自动存储持续时间的变量(即本地变量)的析构函数将在变量的生命周期结束时运行。如果没有可访问的析构函数,则编译器将拒绝编译分配此类变量的代码。
基本上,“堆栈分配”(顺便说一句,术语的不正确选择)与免费存储分配之间的区别在于,使用局部变量时,构造函数/析构函数调用总是成对出现,而使用免费存储分配,则可以构造对象而不会破坏对象。因此,通过阻止访问析构函数,您的代码将无法分配该类型的局部变量(如果构造函数运行,则析构函数也必须运行,但是没有析构函数,因此程序被拒绝)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句