use*_*009 2 c++ move stdstring c++11
假设我有一个从自定义内存池分配的char*并填充了必要的数据.我在std :: string类的assign方法中使用了char*,并确保使用std :: move调用move varient.
void DoWork(char* my_pool_allocated_buffer) {
std::string s;
s.assign(std::move(my_pool_allocated_buffer));
//do some work with s
}
Run Code Online (Sandbox Code Playgroud)
我有两个问题.
在方法结束时,
std::string析构函数是否会尝试删除my_pool_allocated_buffer通过assign获取的内容?
不,因为它没有获得缓冲区.它将内容复制到自己的托管缓冲区中.
使用
std::move对此有何影响?
不,std::move这里没有效果(除了令代码混淆的读者).如果有一个重载assign接受了对指针的右值引用,那么就会选择它; 但没有这样的超载,所以它没有任何区别.
(顺便说一句,这样一个过载来获取原始指针的"所有权"将是一个非常糟糕的主意,因为无法知道原始指针是否意图"拥有"其目标,或者只是引用它.通常应该使用智能指针来表达所有权,以及原始指针没有所有权的约定.)