有什么方法可以防止动态分配类?

Jas*_*n S 7 c++ dynamic-allocation

我在我的嵌入式系统中使用了C++基类和子类(为了清楚起见,我们称之为A和B).

这对时间和空间至关重要,所以我真的需要它是最小的.

编译器抱怨缺少虚拟析构函数,我理解这一点,因为如果你分配一个B* 以后删除指针作为实例,那会导致你遇到麻烦A*.

但是我永远不会分配这个类的任何实例.有没有一种方法,我可以重载operator new(),使得它编译,如果有要么类没有动态分配,但是如果最终用户尝试分配A或B的新实例会导致编译器错误?

我正在寻找一种类似于通过私有构造函数"中毒"自动编译器复制构造函数的常用技术的方法.(例如http://channel9.msdn.com/Forums/TechOff/252214-Private-copy-constructor-and-private-operator-C)

Pup*_*ppy 9

你可以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();
}
Run Code Online (Sandbox Code Playgroud)