malloc/free 不會調用類的構造/析構函數


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM