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

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

Foo *ptr = new Foo;

只允许他们这样做:

Foo myfooObject;

有人有什么想法吗?

干杯,

最佳答案
Nick’s answer是一个很好的起点,但不完整,因为你实际需要重载:

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

(好的编码实践会建议你也应该重载删除和删除[]运算符 – 我会的,但由于他们不会被调用,这并不是真的有必要。)

Pauldoo也是正确的,虽然它从Foo继承下来,但是在Foo上并没有生存。你可以做一些模板元编程魔术来帮助防止这一点,但它不会对“邪恶的用户”免疫,因此可能不值得的复杂性。如何使用文档,以及代码审查以确保其正确使用,是唯一的〜100%的方式。

转载注明原文:c++ 如何防止在堆上创建对象? - 代码日志