[英]C++ 'new' operator - Modes of use?
我最近遇到了一個不尋常的使用new運算符來重新初始化一個C ++類,代碼如下:
#include <iostream>
struct Test { Test() { std::cout<<"Test Ctor\n"; } };
int main()
{
Test t ;
new (&t) Test;
return 0 ;
}
如果運行此代碼,則會調用Test ctor兩次。 在這種情況下,似乎'new'運算符使用指向對象的指針作為內存源而不是分配新內存,valgrind確認沒有內存泄漏。
有人能否對“新”運算符的使用有所了解?
此運算符稱為placement new。 它在給定地址處運行對象的構造函數,而無需事先分配內存。 例如,它可以在首先分配大型數組,然后在其上構建許多對象時使用。
它被稱為“placement new”,通常用於構造特定內存位置的對象,而不是malloc
返回的默認值。
它不應該以這種方式使用(雙重構造),並且標准沒有說明以這種方式使用它的行為是什么。
那說,至少在過去。 全球的iostream曾經依賴於這種雙重結構。 (但這仍然不是一個好主意。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.