【发布时间】:2013-06-15 17:37:11
【问题描述】:
我制作的应用程序遇到了一些问题。当您将对象移动到矢量后推时,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 而不是在我移动它时调用。我试图避免指针。
【问题讨论】:
标签: c++ visual-studio-2012 c++11 move