gpt4 book ai didi

c++ - 如何在不破坏 vtbl 的情况下执行与 memset(this, ...) 等效的操作?

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

我知道 memset 不适合用于 class 初始化。例如,类似于以下内容:

class X { public: 
X() { memset( this, 0, sizeof(*this) ) ; }
...
} ;

如果混合中有virtual 函数,将会破坏vtbl

我正在处理一个(巨大的)遗留代码库,它是 C-ish 但用 C++ 编译,因此所有有问题的成员通常都是 POD,不需要传统的 C++ 构造函数。 C++ 的使用逐渐深入(如虚函数),这让没有意识到 memset 具有这些额外的 C++ dentry 的开发人员感到痛苦。

我想知道是否有一种 C++ 安全的方法来执行初始的全能零初始化,然后可以在不适合零初始化的情况下进行特定的按成员初始化?

我找到了类似的问题memset for initialization in C++ , 和 zeroing derived struct using memset .这两个都有“不要使用 memset()”答案,但没有好的替代方案(尤其是对于可能包含许多成员的大型结构)。

最佳答案

对于您发现 memset 调用的每个类,添加一个 memset 成员函数,该函数忽略指针和大小参数并对所有数据成员进行赋值。

编辑:实际上,它不应该忽略指针,它应该将它与 this 进行比较。在匹配时,为对象做正确的事情,在不匹配时,重新路由到全局函数。

关于c++ - 如何在不破坏 vtbl 的情况下执行与 memset(this, ...) 等效的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12902651/

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