[英]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
我的問題是:
我可以使用malloc
為對象分配內存嗎?
malloc
如何為沒有構造函數參數的類分配內存?
我可以使用malloc()
進行分配,使用delete
進行解除分配或使用new
進行分配,使用free()
進行解除分配嗎?
沒有構造函數如何調用析構函數?
我可以使用 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.