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

时间:2011-06-07 21:01:53

标签: 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

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:2)

class A
{
private:
    void *operator new(size_t);
    ...
};

elipses用于operator new和其他同类的其他覆盖。

答案 2 :(得分:0)

让运营商新私有