如何防止其他人在堆上创建一个新的类实例?

jer*_*rry 1 c++ inheritance

可能重复:
如何防止通过"new"运算符分配类?(我想确保我的RAII类总是在堆栈上分配.)

假设我在库中定义了一个类

class Base {};
Run Code Online (Sandbox Code Playgroud)

我将该类发布给用户.

一个用户定义了一个新类

class Derived : public Base {}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么Base来防止用户Derived在堆上创建实例?

例如,这是允许的

Derived dd;
Run Code Online (Sandbox Code Playgroud)

这不是

Derived* dd = new Derived();
Run Code Online (Sandbox Code Playgroud)

谢谢,

Mar*_*k B 9

我认为你能做的最好的事情是声明一个private operator new(我不记得是否需要这个,但你可能想要在你的基类中做所有三个:普通,数组和放置).用户仍然可以通过operator new在Derived类中创建自己来解决这个问题,但至少他们必须考虑它并积极地努力颠覆你的意图.

如果您担心在堆上创建类的非意外问题(例如子类的恶意开发人员),则C++不是此项目的语言.它功能强大,有很多地方你必须依靠你的终端程序员而不是绕过意图.