1 #include <iostream> 2 #include <cstdlib> 3 using namespace std; 4 5 class A 6 { 7 public: 8 A() 9 { 10 cout << "A"; 11 } 12 ~A() 13 { 14 cout << "~A"; 15 } 16 }; 17 18 int main() 19 { 20 void *p = malloc(sizeof(A)); 21 22 A *a = new(p) A; 23 24 free(p); 25 return 0; 26 }
以上代码的输出结果是A
malloc单纯地申请一块内存,不会调用类的构造函数
同样,free释放那块内存,不会调用类的析构函数
至于new的用法,待续
--------------------------------------------------------------------
C++ Primer上指出以上例子为“定位(placement)new运算符”的用法。表示可以使用特定地址的内存来存放对象内容。
这种情况下,必须显式地调用类的析构函数。
上述例子,a->A::~A();