我编写的应用程序有一些麻烦。当您将对象移至向量推回时,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";
    return 0;
}


输出将是:


创建
移动
破坏
测试
做完了!
破坏


我如何确保仅FileSetting超出范围时才调用destroy而不是移动它时才调用。我试图避免指针。

最佳答案

std::move()不会破坏对象。您得到的“销毁”来自setting超出范围。

10-07 20:39