C++ で移動セマンティクスを理解して使用するのに苦労しています。Variable
移動コンストラクターと移動代入を実装するオブジェクトがありますが、コピー コンストラクターと代入はありません。一般に a をコピーしVariable
ても意味がないので、コピーを明示的に禁止したいと思います。
class Variable {
public:
// ctod/dtor things
Variable(Variable&&);
Variable& operator =(Variable&&);
// ...
};
Variable
問題は、関数から aを返す正しい方法は何ですか?
Variable& UserObject::giveMeYourVariable() {
// Calculate parameters
Variable v(/* Some parameters */);
return v; // <=== warning: reference to local variable 'v' returned
}
別のコードでは:
UserObject x* = new UserObject;
Variable v = std::move(x->giveMeYourVariable())
上記のコードはエラーなしでコンパイルされますが、ローカル変数への参照を返すことに関する警告が表示されます。このコードはメモリ リークを起こしたり、未定義の動作を引き起こしたり、削除された参照を返したりしますか? 何が間違っていますか?
値による戻り値を更新
すると、参照型の初期化中にエラーが発生します (パーサー ジェネレーターによって生成されたコード内)。
Variable& tmp (this->a_function()); <<== error
エラーは言う:
error: invalid initialization of non-const reference of type 'Variable&' \\
from an rvalue of type 'Variable'
Update 2
この問題はXSD メーリング リストで報告されており、次のリリースで解決される予定です。