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