有没有办法创建一个类Foo
这样我才能做到:
Foo foo;
Run Code Online (Sandbox Code Playgroud)
但不是
Foo* foo = new Foo();
Run Code Online (Sandbox Code Playgroud)
?
我不希望人们能够在堆上分配Foo的副本.
谢谢!
编辑:对不起,我错了"只堆栈,不堆".我想说的是"不能使用新的运营商".
Ste*_*lly 16
阻止在堆上创建对象是不可能的.总有办法解决它.即使你设法operator new为Foo 隐藏,你仍然可以:
#include <new>
struct Foo {
int x;
private:
void* operator new (std::size_t size) throw (std::bad_alloc);
};
struct Bar
{
Foo foo;
};
int main()
{
Bar* bar = new Bar;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
嘿,你有一个Foo在堆上.
让你的operator new私人.
#include <new>
struct Foo {
int x;
private:
void* operator new (std::size_t size) throw (std::bad_alloc);
};
Run Code Online (Sandbox Code Playgroud)
上的C++ 0x,你可以delete在operator new:
struct Foo {
int x;
void* operator new (std::size_t size) throw (std::bad_alloc) = delete;
};
Run Code Online (Sandbox Code Playgroud)
请注意,您需要new[]单独为操作员执行相同操作.
| 归档时间: |
|
| 查看次数: |
2189 次 |
| 最近记录: |