使用 reinterpret_cast 变量赋值后可能的析构函数?
Possible destructor after a variable assignment using reinterpret_cast?
我希望这不是一个完全无知的问题,但我似乎找不到关于我遇到的一些代码片段的任何信息。
我就不描述了,举个例子吧:
auto x = reinterpret_cast<T*>(something->data * sizeof(T));
myResult = std::move(*x);
x->~T();
请注意,此代码存在于模板 class 中,因此存在 T
。
我对reinterpret_cast<>
和std::move().
有一个大致的了解,但是我不太明白x->~T()
这个语句是什么意思。比较熟悉C
,我认为这是<datatype>()
返回值的逻辑非。不过从语法上看,它更有意义——至少对我来说——它是某种析构函数。
如果有人能对此有所了解,我们将不胜感激。
它是一个显式析构函数,通常与placement new结合使用。 Placement new 在已经预先分配的内存中覆盖一个对象(实例化一个对象),然后调用构造函数(see wiki article)。
我希望这不是一个完全无知的问题,但我似乎找不到关于我遇到的一些代码片段的任何信息。
我就不描述了,举个例子吧:
auto x = reinterpret_cast<T*>(something->data * sizeof(T));
myResult = std::move(*x);
x->~T();
请注意,此代码存在于模板 class 中,因此存在 T
。
我对reinterpret_cast<>
和std::move().
有一个大致的了解,但是我不太明白x->~T()
这个语句是什么意思。比较熟悉C
,我认为这是<datatype>()
返回值的逻辑非。不过从语法上看,它更有意义——至少对我来说——它是某种析构函数。
如果有人能对此有所了解,我们将不胜感激。
它是一个显式析构函数,通常与placement new结合使用。 Placement new 在已经预先分配的内存中覆盖一个对象(实例化一个对象),然后调用构造函数(see wiki article)。