gpt4 book ai didi

c++ - 如果包含析构函数,类的大小会增加

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:25 25 4
gpt4 key购买 nike

class MyClass {
int data;
public:
MyClass() : data(0) { /*cout << "Ctor" << endl;*/}
void* operator new(size_t sz) { cout << "Size in new: " << sz << endl; void* s = malloc(sz); return s; }
void* operator new[] (size_t sz) { cout << "Size: " << sz << endl; void* s = malloc(sz); return s; }

void operator delete(void* p) { free(p); }
void operator delete[](void* p) { free(p); }
~MyClass() {}
};
int main() {
// your code goes here
MyClass* p = new MyClass[1];
delete[] p;
cout << "Size of class: " << sizeof(MyClass) << endl;
return 0;
}

这里我重载了 new 和 delete 运算符。我在这里观察到的奇怪行为是,如果我将传递给 new 运算符的析构函数大小增加 4,而 MyClass 的大小仍然是 4,这很明显。

我得到的输出是析构函数:
尺码:8
类(class)人数:4

我得到的输出没有析构函数:
尺码:4
类(class)人数:4

为什么包含析构函数会增加大小?

最佳答案

想想delete[] 是如何工作的。如果没有析构函数,很可能它需要做的就是将地址传递给 free。但是如果有一个析构函数,它必须知道数组中有多少个元素,所以它知道要调用多少次析构函数。因此需要一些额外的空间来容纳数组的大小。

关于c++ - 如果包含析构函数,类的大小会增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402274/

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