我一直在閱讀關於在SO上放置新東西的一些問題,我發現了一些不同的方式來使用它,我想我會在這裏問一下。我明白,新的放置方式基本上是一種創建對象的方式,並將它放在已分配的選定內存中;我只是不明白所有的錯綜複雜。C++「placement new」錯綜複雜
First one只見SO使用這個例子(從C++引物):
const int BUF = 512;
const int N = 5;
char buffer[BUF];
double * pd1;
pd1 = new (buffer) double[N];
Second one只見SO使用這個例子(從C++的Primer Plus):
char * buffer = new char[BUF]; //get a block of memory
JustTesting *pc1, *pc2;
pc1 = new (buffer) JustTesting; //Place object in buffer
的主要區別這兩者之間的區別在於,在第一個代碼塊中,buffer
是一個char數組,而在第二個示例中它是一個指向char數組的指針,但這兩個代碼塊都包含new (buffer)
。
我的第一個問題是:在此上下文中使用placement new時,它可以接受一個對象還是它的地址,如果是這樣,是首選的嗎?
我也看過放置新的沒有左值使用。見下文。
new(&myObject) myClass;
我的第二個問題是:安置新的與沒有左值之間有什麼區別?
一個數組變量衰減到指針的第一要素,所以雖然你的兩個例子看起來不同,他們實際上是使用指針都放置新的下面實現。 –
您可能需要更好地理解指針和數組之間的關係 - 兩個示例都使用指針。 –
@Mark Ransom哦,沒有意識到它是那麼簡單。謝謝,這回答我的第一個問題。 – ImaginaryHuman072889