假设我在库中定义了一个类
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)
谢谢,
我认为你能做的最好的事情是声明一个private operator new(我不记得是否需要这个,但你可能想要在你的基类中做所有三个:普通,数组和放置).用户仍然可以通过operator new在Derived类中创建自己来解决这个问题,但至少他们必须考虑它并积极地努力颠覆你的意图.
如果您担心在堆上创建类的非意外问题(例如子类的恶意开发人员),则C++不是此项目的语言.它功能强大,有很多地方你必须依靠你的终端程序员而不是绕过意图.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |