非可換の非コピー可能なクラスを非明示的なコンストラクタで使用している場合、返すことができます(C++ 11の場合):明示的なコンストラクタを使用してコピー不可能なオブジェクトを返す
#include <iostream>
class NonCop
{
public:
/*non explicit*/ NonCop(int a, int b) : number(a + b) {}
NonCop(const NonCop&) = delete;
int number;
};
NonCop get_non_cop()
{
return {1, 2};
}
int main()
{
NonCop &&nc = get_non_cop();
std::cout << "three: " << nc.number << std::endl;
return 0;
}
ただし、コンストラクタが明示的な場合は機能しません。 NonCop
に変更を加えずにC++ 11/C++ 14でこれを行う方法はありますか?
現在、私はNonCopからコンストラクタを "解説する"ラッパーを使って派生した回避策を使用していますが、それほど美しくはありません。
[this](http://stackoverflow.com/questions/34263916/is-it-possible-to-return-an-instance-of-a-non-movable-non-copyable-type) C++のための11/14。 C++では、17の保証されたコピーelisionがコードをコンパイルすることに注意してください。 – NathanOliver
私はそれが実際にうまくいくことをうんざりしており、また、あなたがこれをしたいと困惑しました。呼び出し側が同じオブジェクトを元に戻さないようにするのは非常にひどいことです。私はこれが単なる学問的な運動であり、あなたが実際にやりたいことではないことを願っています。 – Mehrdad
@Mehrdad:C++ 03では、オブジェクトの有効期間をスコープの終わりまで拡張するconst参照に一時オブジェクトをバインドすることもできます。私はそれが愚かでスコープガードによって使われていると思う。 – knivil