防止类动态分配的任何方法

Any way to prevent dynamic allocation of a class?

本文关键字:任何 方法 动态分配      更新时间:2023-10-16

我在嵌入式系统中使用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的其他重写和类的其余部分。

只需使操作员成为新的专用