繁体   English   中英

这个“新”语法是什么意思?

[英]what does this “new” syntax mean?

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

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()调用哪个版本的GetT()

什么是new (GetT()) T(t); 完全是指?

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

调用哪个版本的GetT()

第二个。
只要编译器具有在const和非const函数之间进行选择的选项,它就会选择非const版本。
具体来说,在这种情况下@James在评论中指出:
非const版本优先,因为调用它的成员函数是非const。

那被称为“ Placement new ”。

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

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

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

阅读本文: “放置新”有什么用途?

这看起来像是一个新的来电。 这里没有分配内存。 new只是在括号中返回地址,并在虚拟构造的对象上调用构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM