使用std :: move与使用指向线程的指针相比是否有性能损失?

Chr*_*ski 5 c++ memory multithreading pointers

我想象std :: move()在类似以下内容的情况下会带来更高的性能成本:

std::thread thrd(&func, this);
someArrOfThreads[0] = std::move(thrd);
Run Code Online (Sandbox Code Playgroud)

std::thread *thrd = new std::thread(&func, this);
someArrOfThreadPointers[0] = thrd;
Run Code Online (Sandbox Code Playgroud)

这是真的?如果是这样,是否只是std::move()改变线程或其他内容的内存边界问题?

我意识到有一个区别,在第一个中,我实际上是为线程分配数组的值,而另一个是指向线程的指针,在第二个中,线程停留在其地址中。

dor*_*ron 6

唯一要做的std::move就是将左值转换为右值引用。然后,这会导致调用赋值运算符的右值引用版本。从代码生成的角度来看,这是一个空操作。

右值重载可能更有效,因为它允许移动类内部而不是执行深层复制。