c++ - 如何防止其他人在堆上创建类的新实例?

标签 c++ inheritance

<分区>

Possible Duplicate:
How do I prevent a class from being allocated via the 'new' operator? (I'd like to ensure my RAII class is always allocated on the stack.)

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

class Base {};

然后我将类(class)发布给用户。

一个用户定义了一个新类

class Derived : public Base {}

问题是我可以在 Base 中做什么来防止用户在堆上创建 Derived 的实例?

例如,这是允许的

Derived dd;

这不是

Derived* dd = new Derived();

谢谢,

最佳答案

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

如果您担心在堆上创建类时出现非意外问题(例如子类的恶意开发者),C++ 不是该项目的语言。它功能强大,并且有很多地方您必须依赖您的最终程序员,而不是绕过意图。

关于c++ - 如何防止其他人在堆上创建类的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11041239/

相关文章:

c++ - 从知道其结构类型的实例中获取值

c++ - 为什么程序启动缓慢但后来获得全速?

c# - 为什么 C# 在向上转换后将实例的先前非 null 成员视为 null?

java - 确保方法被调用

c++ - 将数据封装在类之外

c++ - 当 QAction 位于前导位置时如何获取 QLineEdit 文本偏移量

c++ - QTextDocument::drawContents 仅以 96 dpi 呈现

django - 重命名 Django 父类(super class)模型并正确更新子类指针

python - 返回非实例化类类型的类型提示

iOS:覆盖子类中父类(super class)的setter属性