限制在C++中堆和堆栈上的对象的创建

sky*_*oor 7 c++

我有一个关于如何限制堆或堆栈上的对象创建的问题?例如,如何确保对象不在堆上?如何确保一个物体不在堆栈上?

谢谢!

小智 15

为了防止在堆上意外创建对象,请为其提供新的私有操作符.例如:

class X {
private:
    void *operator new(size_t);
    void *operator new[](size_t);
};
Run Code Online (Sandbox Code Playgroud)

要防止在堆栈上意外创建,请使所有构造函数都为私有,和/或使析构函数为私有,并提供执行相同功能的友元或静态函数.例如,这里有两个:

class X {
public:
    static X *New() {return new X;}
    static X *New(int i) {return new X(i);}
    void Delete(X *x) {delete x;}
private:
    X();
    X(int i);
    ~X();
};
Run Code Online (Sandbox Code Playgroud)


Ton*_*vel 5

为了防止在堆栈上分配对象,请定义私有析构函数。这会导致基于堆栈的对象出现编译错误,因为当基于堆栈的对象超出范围时,它会禁止隐式析构函数调用。您将需要实现一个公共销毁方法,大致如下:

void MyObject::destroy() const
{
   delete this;
}
Run Code Online (Sandbox Code Playgroud)

清理在堆上分配的对象。请务必阅读C++ 常见问题解答以了解一些注意事项。

同样,为了防止在堆上分配对象,请确保将new运算符定义为私有。