0

作成したアプリケーションに問題があります。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 のみが呼び出されるようにするにはどうすればよいですか。私はポインタを避けようとしています。

4

1 に答える 1

5

std::move()オブジェクトを破壊しません。あなたが得ている「破壊」はsetting、範囲外に出ることによるものです。

于 2013-06-15T09:37:11.283 に答える