如何将对象移动到未初始化的内存中?

Meh*_*dad 4 c++ move-semantics c++11

给定已分配但未初始化的内存位置,如何将某个对象移动到该位置(销毁原始对象),而不构建可能昂贵的中间对象?

Mik*_*our 7

你可以使用placement new来在内存中构建它:

void * memory = get_some_memory();
Thing * new_thing = new (memory) Thing(std::move(old_thing));
Run Code Online (Sandbox Code Playgroud)

如果它有一个非平凡的析构函数,那么你需要在完成时明确地销毁它:

new_thing->~Thing();
Run Code Online (Sandbox Code Playgroud)

  • 移动和交换根本不是一回事.移动构造函数*从已存在的对象初始化*新对象,而交换需要两个现有对象. (3认同)