lov*_*ing 0 c++ operator-overloading
在以下代码中:
#include<stdlib.h>
#include<iostream>
using namespace std;
class Test {
public:
void* operator new(size_t size);
void operator delete(void*);
Test() { cout<<"\n Constructor called"; }
~Test() { cout<<"\n Destructor called"; }
};
void* Test::operator new(size_t size)
{
cout<<"\n new called";
void *storage = malloc(size);
return storage;
}
void Test::operator delete(void *p )
{
cout<<"\n delete called";
free(p);
}
int main()
{
Test *m = new Test();
delete m;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
new called
Constructor called
Destructor called
delete called
Run Code Online (Sandbox Code Playgroud)
但是,当我调用 new 运算符时,我没有指定要分配给对象的大小,也没有使用任何默认值作为大小。有人可以解释为该对象分配多少内存以及为什么?
operator new 传递 C++ 确定的分配所需的大小。
这不是您在调用时直接调用的内容new Test()- 相反,该语言将其(非常)粗略地转换为:
void* tmp = Test::operator new(sizeof(Test));
Test* result = ::new(tmp) Test();
Run Code Online (Sandbox Code Playgroud)
上面的第一行分配内存。第二个Test在那个内存中构造了一个;它被称为“放置新”。
构造和获取内存都被调用的事实new令人困惑,但确实如此。
(与编译器所做的真正等效的代码new Test()处理构造失败,遵循更复杂的查找规则等)。
| 归档时间: |
|
| 查看次数: |
124 次 |
| 最近记录: |