如何讓new操作符不分配記憶體,只呼叫建構函式

2021-05-11 12:30:59 字數 1383 閱讀 8942

如何讓new操作符不分配記憶體,只呼叫建構函式

2009-11-19 18:37

如何讓new操作符不分配記憶體,只呼叫建構函式 收藏

問題:c++中的new操作符 通常完成兩個工作 分配記憶體及呼叫相應的構造出世核函式。

請問:1)如何讓new操作符不分配記憶體,只呼叫建構函式?

2) 這樣的用法有什麼用?

解答:(要求new顯式呼叫建構函式,但不分配記憶體。)

題目要求不能生成記憶體 還要呼叫建構函式 說明這個類裡面沒有對內部操作 但可以對外部操作 比如static的數

摘錄:如果我是用new分配物件的,可以顯式呼叫析構函式嗎?

可能不行。除非你使用定位放置 new.

class fred

}; int main()

其中這個10000可以是任意數,但不能為0

2)定位放置new(placement new)有很多作用。最簡單的用處就是將物件放置在記憶體中的特殊位置。這是依靠 new表示式部分的指標引數的位置來完成的:

#include // 必須 #include 這個,才能使用 "placement new"

#include "fred.h"     // class fred 的宣告

void somecode()

line #1 在記憶體中建立了乙個sizeof(fred)位元組大小的陣列,足夠放下 fred 物件。line #2 建立了乙個指向這塊記憶體的首位元組的place指標(有經驗的 c 程式設計師會注意到這一步是多餘的,這兒只是為了使**更明顯)。line #3 本質上只是呼叫了建構函式 fred::fred()。fred建構函式中的this指標將等於place。因此返回的 f 將等於place。  

line #3 本質上只是呼叫了建構函式 fred::fred()。

placement new的作用就是:建立物件但是不分配記憶體,而是在已有的記憶體塊上面建立物件。

用於需要反覆建立並刪除的物件上,可以降低分配釋放記憶體的效能消耗。

#include

#include

const intchunk = 16;

class foo

foo( )

private :

int_val;

};//預分配記憶體,但沒有foo物件

char*buf = new char[ sizeof(foo) * chunk ];

intmain( void )

{//在buf中建立乙個foo物件

foo*pb = new (buf) foo;

//檢查乙個物件是否被放在buf中

if ( pb->val() == 0 )

{cout <<"new expressio worked!" delete buf;

return 0;

如何讓new操作符不分配記憶體,只呼叫建構函式

問題 c 中的new操作符 通常完成兩個工作 分配記憶體及呼叫相應的構造出世核函式。請問 1 如何讓new操作符不分配記憶體,只呼叫建構函式?2 這樣的用法有什麼用?解答 要求new顯式呼叫建構函式,但不分配記憶體。題目要求不能生成記憶體 還要呼叫建構函式 說明這個類裡面沒有對內部操作 但可以對外部...

如何讓new 操作 不分配記憶體 只呼叫建構函式

沒有記憶體池的時候,你只是用new直接建立了乙個物件,但是new的過程分為兩步,首先是分配記憶體,然後是呼叫建構函式。記憶體池就只是負責記憶體的分配,有了記憶體池後,你再去建立物件時候,只需要先從記憶體池中取出記憶體,然後再在取出的記憶體上呼叫物件的建構函式,產生你需要的物件 如何讓new操作符不分...

c 特有的動態分配記憶體new操作符

通過new來動態分配記憶體並返回分配的記憶體首位址。例如 int ps new int 或者開闢乙個記憶體塊 int pt new int 10 同樣動態分配的記憶體 使用過後要記得 給系統,用delete 釋放 include using namespace std int main 使用new ...