簡體   English   中英

C ++'new'運算符 - 使用模式?

[英]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.

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