簡體   English   中英

我可以使用 malloc 為類對象分配內存嗎?

[英]Can I allocate memory for class objects using malloc?

請參閱以下代碼:

 #include<iostream>
 #include<stdlib.h>


 using namespace std;

 class ex
 {
     int i;
public:
   ex(int x){
     i=x;
     cout<<"\nconstructor";
   }
   void setval(int x)
   {
       i=x;
   }
   int geti(){return i;}

   ~ex()
   {
     cout<<"\ndestructor";
   }
};

int main()
{
  ex *ob;

  ob=(ex*) malloc(sizeof(ex));

  ob->setval(5);

  cout<<ob->geti();

  delete ob;
 }

我以為上面的代碼會顯示錯誤,但它編譯成功並顯示輸出

5
destructor
Process returned 0 (0x0)   execution time : 0.270 s

我的問題是:

  1. 我可以使用malloc為對象分配內存嗎?

  2. malloc如何為沒有構造函數參數的類分配內存?

  3. 我可以使用malloc()進行分配,使用delete進行解除分配或使用new進行分配,使用free()進行解除分配嗎?

  4. 沒有構造函數如何調用析構函數?

我可以使用 malloc 為對象分配內存嗎?

是的,您可以使用malloc分配內存,然后該內存可用於存儲對象。

但是,讓我們重新表述一下:

我可以使用malloc創建類對象嗎?

不。

您的程序具有未定義的行為,因為您從未創建過 object

相反,對 C++ 類對象使用new / delete (或智能指針),或者只是以正常方式聲明它們。

malloc如何為沒有構造函數參數的類分配內存?

正是這樣。 它分配內存,但實際上並沒有在該內存中構造任何ex對象。

如果您確實需要,您現在可以使用新的展示位置來執行此操作。

我可以使用 malloc() 進行分配和刪除以進行解除分配,或使用 new 進行分配並使用 free() 進行解除分配嗎?

不。

沒有構造函數如何調用析構函數?

沒有有意義的方法來回答這個問題,因為您的程序具有未定義的行為。

1)我可以使用 malloc 為對象分配內存嗎

當然。 但是 malloc 不創建任何對象。 可以使用 new 表達式創建具有動態存儲的對象。 Placement-new 可用於在使用 malloc 分配的內存中創建對象。

2) malloc 如何為沒有構造函數參數的類分配內存?

除了內存量(以及可能的內存對齊)之外,為一種類型或另一種類型分配內存沒有區別。

3)我可以使用 malloc() 進行分配和刪除進行解除分配或使用 new 進行分配,使用 free() 進行解除分配嗎?

僅當您不介意您的程序具有未定義的行為時。 你應該介意。 Free 只能與來自 malloc(或 realloc、strdup 等)的指針一起使用。 delete 只能與來自 new 的指針一起使用。 delete[] 只能與來自 new[] 的指針一起使用。

4)在沒有構造函數的情況下如何調用析構函數?

構造函數對是否調用析構函數沒有影響。 當對象被銷毀時調用析構函數。 delete會破壞指向的對象。 如果沒有對象,則程序的行為是未定義的。 您的程序就是這種情況。 行為也是未定義的,因為指針不是 new 的結果,而是 malloc 的結果。 也因為成員函數是通過指向不存在對象的指針調用的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM