gpt4 book ai didi

c++ - 这个 "new"语法是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 23:53:04 24 4
gpt4 key购买 nike

最近看到一段代码是这样的:

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()

最佳答案

What does new (GetT()) T(t); exactly means?

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

which version of GetT() is called?

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

关于c++ - 这个 "new"语法是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12722823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com