将 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 !
我可能需要做一些与 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 !