Dae*_*mon 2 c++ destructor operator-overloading sizeof new-operator
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;
}
Run Code Online (Sandbox Code Playgroud)
在这里,我重载了new和delete运算符.我在这里观察到的奇怪行为是,如果我包含传递给new运算符的析构函数大小增加4并且MyClass的大小仍然是4这是显而易见的.
我得到的输出是析构函数:
大小:8
类的大小:4
我得到的输出没有析构函数:
大小:4
类的大小:4
为什么包含析构函数会增加大小?
想想如何delete[]运作.如果没有析构函数,则很可能只需将地址传递给free.但是如果有一个析构函数,它必须知道数组中有多少元素,因此它知道调用析构函数的次数.因此需要一些额外的空间来保持阵列的大小.