将 C++ 对象移动到内存位置

move C++ object to memory location

我可能需要做一些与 std::vector 类似的事情:

T *mem = malloc(...); // notice this is just memory allocation.
T t;
move... t to mem
mem->doSomething();

如何移动 t 分配的内存?

如何将对象从分配的内存移动到新变量。

如何从分配的内存中删除对象 - 手动调用 d-tor?

我必须使用 placement new 和赋值运算符吗?

像这样,但如果你不知道自己在做什么,那么我会避免这样做:

#include <new>
#include <stdlib.h>

void* mem = malloc(sizeof(T));
T t;
T* tt = new(mem) T( std::move(t) );
tt->doSomething();
tt->~T();
free(mem);

你不能直接"move" t那个内存,t总是在创建它的地方,但你可以在那个位置创建另一个对象,作为副本t 的(使用移动构造函数制作副本,如果它有一个,但仍然留下 t 它原来的位置并且仍然存在)。

您不能移动活动对象,但可以从中移动构建另一个对象。

int main() {
    std::string str = "Hello World !";

    // Allocate some storage
    void *storage = std::malloc(sizeof str);

    std::cout << str << '\n';

    // Move-contruct the new string inside the storage
    std::string *str2 = new (storage) std::string(std::move(str));

    std::cout << str << '|' << *str2 << '\n';

    // Destruct the string and free the memory
    str2->~basic_string();
    free(storage);
}

输出:

Hello World !
|Hello World !