【发布时间】:2012-10-18 21:13:34
【问题描述】:
如何为类类型重载 new 运算符,以便它在堆栈而不是堆上分配内存(基本上这样用户就不必在之后调用 delete)。
这样的事情怎么样:
class A{
private:
A(int i):
this->i(i);
{}
A a;
int i;
public:
void* operator new(size_t sz){
a(12);
}
};
上述解决方案是否有效?
【问题讨论】:
-
嗯,你不可能有堆栈和堆的原因。
-
如果用户不仅不必调用
delete,而且也不必调用new,该怎么办?那不是更好吗? -
我认为 avakar 确实在这里有所作为。你绝对应该走那条路=P
-
@user965369:您的问题中没有关于私有构造函数的内容。我们可以在问题中提供您的实际用例吗?
-
整个想法没有意义,因为即使可以做到,也会违反
new的“预期行为”——分配一个生命周期与当前无关的对象范围。哎呀,如果调用者想在堆栈上分配对象将在堆栈上分配它,句号! (s/在堆栈上/具有自动存储持续时间/)
标签: c++ memory-management