小编Ord*_*rdo的帖子

为什么不可能将变量移动到另一个std :: thread

你不能将一个物体移动到另一个物体的原因是什么std::thread?有些情况下它可能有用.例如:

您创建一个接受传入套接字连接的循环.将传入连接移动到另一个将处理连接的线程会很好.在accept循环中不再需要连接.那你为什么要创建指针呢?

一个小测试用例:

#include <iostream>
#include <thread>

using namespace std;

class Pointertest
{
public:
    Pointertest() {cout << "Constructor";}
    Pointertest(Pointertest &pointertest) {cout << "Copy";}
    Pointertest(Pointertest &&pointertest) {cout << "Move";}
    ~Pointertest() {cout << "Destruct";}
};

void foo(Pointertest &&pointertest)
{

}

int main()
{
    Pointertest pointertest;

    foo(std::move(pointertest)); //Works
    thread test(foo,std::move(pointertest)); //**cannot convert parameter 1 from 'Pointertest' to 'Pointertest &&'**
}
Run Code Online (Sandbox Code Playgroud)

c++ windows move c++11 visual-studio-2012

5
推荐指数
2
解决办法
1430
查看次数

当我将它推送到std :: vector push_back时,std :: move会破坏我的对象

我在制作应用程序时遇到了一些麻烦.当你将它移动到向量后推时,std :: move会破坏你的对象.这是一个小例子:

#include <string>
#include <iostream>
#include <vector>

using namespace std;

class FileSetting
{
private:
    FileSetting(FileSetting &fileSetting) { cout << "Copy\n"; }
public:
    FileSetting(std::string name, void * value, int size) { cout << "Create\n"; }
    FileSetting(FileSetting &&fileSetting) { cout << "Move\n"; }
    ~FileSetting() { cout << "Destroy\n"; }

    void test() { cout << "Test\n"; }
};

int main()
{
    vector<FileSetting> settings;
    {
        char * test = "test";
        FileSetting setting("test", test, strlen(test) * sizeof(char)); 
        settings.push_back(std::move(setting)); 
    }

    settings[0].test();

    cout << "Done!\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ move c++11 visual-studio-2012

0
推荐指数
1
解决办法
308
查看次数

标签 统计

c++ ×2

c++11 ×2

move ×2

visual-studio-2012 ×2

windows ×1