防止类动态分配的任何方法
Any way to prevent dynamic allocation of a class?
我在嵌入式系统中使用C++基类和子类(为了清楚起见,我们称它们为a和B)。
它对时间和空间都很关键,所以我真的需要它最小化。
编译器抱怨缺少虚拟析构函数,我理解这一点,因为如果您分配一个B*
,然后将指针作为A*
的实例删除,这可能会给您带来麻烦。
但我永远不会分配这个类的任何实例。有没有一种方法可以重载operator new()
,使其在没有任何一个类的动态分配的情况下进行编译,但如果最终用户试图分配a或B的新实例,则会导致编译器错误?
我正在寻找一种类似于通过私有构造函数"毒害"自动编译器副本构造函数的常见技术的方法。(例如。http://channel9.msdn.com/Forums/TechOff/252214-Private-copy-constructor-and-private-operator-C)
您可以像复制构造函数一样毒害operator new
。只是要确保不要毒害新的位置。虚拟析构函数仍然是一个不错的建议。
int main() {
char data[sizeof(Derived)];
if (condition)
new (data) Derived();
else
new (data) Base();
Base* ptr = reinterpret_cast<Base*>(&data[0]);
ptr->~Base();
}
class A
{
private:
void *operator new(size_t);
...
};
elipse用于operator new
的其他重写和类的其余部分。
只需使操作员成为新的专用
相关文章:
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 无法"this"指针传递到另一个类并在 CPP 中调用该类的任何方法
- 任何方法都可以在C++中比较数据结构中的许多方法
- 在DelphiInterface上实现Dynamic_cast以获取基础对象类的任何方法
- 使用原始字节向量作为提升序列化的存档的任何方法
- 当我的结构中的任何变量发生更改时触发的事件的任何方法
- 是否有任何方法可以将两个boost :: multipRecision :: cpp_int编号乘以
- 是否有任何方法可以通过使用声明来提高可见度
- 设置用G 构建的二进制版本的任何方法
- 在参数相关查找之前进行模板替换的任何方法(或解决方法?
- 是否有任何方法可以在用户输入文本时读取字符
- 识别哪种QTIMER的任何方法
- C 模板功能是否有任何方法可以采用n个参数
- 告诉链接器"respect" __attribute__((__used__))的任何方法
- 是否有任何方法可以在初始化之前更改变量的类型,您可以用示例解释
- 是在32位系统上为Android Studio安装CMAKE的任何方法,以允许C 支持
- Winforms-将Visual C 项目UI转换为Visual C#的任何方法
- 复制列表类的构造函数,而无需在实现中使用任何方法
- 在成员变量上执行std :: upper_bound的任何方法
- 在海湾合作委员会中加快宏观预处理的任何方法