如何防止在堆上创建对象?

2024-01-09

有谁知道如何在独立于平台的 C++ 代码中阻止在堆上创建对象?也就是说,对于“Foo”类,我想阻止用户这样做:

Foo *ptr = new Foo;

并且只允许他们这样做:

Foo myfooObject;

有人有什么想法吗?

Cheers,


尼克的回答 https://stackoverflow.com/questions/10985/how-to-prevent-an-object-being-created-on-the-heap#11003是一个很好的起点,但不完整,因为您实际上需要重载:

private:
    void* operator new(size_t);          // standard new
    void* operator new(size_t, void*);   // placement new
    void* operator new[](size_t);        // array new
    void* operator new[](size_t, void*); // placement array new

(良好的编码实践建议您还应该重载delete和delete[]运算符——我会的,但是因为它们不会被调用,所以它不是really必要的。)

Pauldoo https://stackoverflow.com/questions/10985/how-to-prevent-an-object-being-created-on-the-heap#11018同样正确的是,尽管它确实可以从 Foo 继承,但它无法在 Foo 上聚合。您可以执行一些模板元编程魔法来帮助防止这种情况,但它不会免受“邪恶用户”的影响,因此可能不值得复杂化。关于如何使用它的文档以及确保正确使用它的代码审查是唯一的 100% 方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止在堆上创建对象? 的相关文章

随机推荐