gpt4 book ai didi

c++ - 有什么方法可以防止类的动态分配?

转载 作者:可可西里 更新时间:2023-11-01 18:26:51 25 4
gpt4 key购买 nike

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

它对时间和空间都很关键,所以我真的需要它尽可能小。

编译器提示缺少虚拟析构函数,我理解这一点,因为如果您分配一个 B* 并随后将指针作为 A 的实例删除,这会给您带来麻烦*

但是我永远不会分配这个类的任何实例。有没有一种方法可以重载 operator new(),以便在没有动态分配任何一个类的情况下进行编译,但如果最终用户尝试分配 A 或 B 的新实例,则会导致编译器错误?

我正在寻找一种类似的方法来解决通过私有(private)构造函数“中毒”自动编译器复制构造函数的常见技术。 (例如 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();
}

关于c++ - 有什么方法可以防止类的动态分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com