【发布时间】:2015-07-14 09:04:05
【问题描述】:
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
班级人数:4人
我得到的输出没有析构函数:
尺寸:4
班级人数:4人
为什么包含析构函数会增加大小?
【问题讨论】:
-
尝试创建一个包含 100 个对象的数组,看看是否分配了 800 个字节或 404 个字节,看看是否能告诉你什么。
-
^^^ 另外,你应该使用 C++ 全局操作符 new 而不是 C malloc。
标签: c++ operator-overloading destructor new-operator sizeof