这"new"语法是什么意思?

what does this "new" syntax mean?

本文关键字:意思 是什么 语法 new      更新时间:2023-10-16

最近我读了一段这样的代码:

template <unsigned long size>
class FooBase
{
  bool m_bValid;
  char m_data[size];
};
template <class T>
class Foo : public FooBase<sizeof(T)>
{
  // it's constructor
  Foo(){};
  Foo(T const & t) {construct(t); m_bValid = (true);}
  T const * const GetT() const { return reinterpret_cast<T const * const>(m_data); }
  T * const GetT() { return reinterpret_cast<T * const>(m_data);}
  // could anyone help me understand this line??
  void construct(T const & t) {new (GetT()) T(t);}
};

我已经对代码进行了切片以确保它没有那么复杂,主要问题是关于construct(T const & t)函数。

new (GetT()) T(t);到底是什么意思?

顺便说一句,哪个版本的GetT()叫?

new (GetT()) T(t);到底是什么意思?

它是放置新的,它允许您将对象放置在内存中的特定位置,该位置由 Get() 返回。

哪个版本的GetT()被称为?

第二个。
每当编译器可以选择 const 和非 const 函数时,它都会选择非 const 版本。
具体来说,在这种情况下,正如@James在评论中指出的那样:
非常量版本被优先选择,因为调用它的成员函数是非常量。

称为"新放置"。

这意味着您在给定的内存缓冲区上创建一个新对象。

new (buffer) T(); //means it will instantiate an object T in the buffer.

这允许您拥有内存缓冲区和自定义分配器,而无需从操作系统请求和分配新内存。

阅读以下内容:"新放置"有什么用途?

看起来像一个放置新调用。此处未分配内存。new 只是返回括号中的地址,并在虚拟构造的对象上调用构造函数。