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();