値によってオブジェクトを返すメソッドがあります。このメソッドは、私が制御できないライブラリからのものです。オブジェクトをさらに処理するために、このオブジェクトでunique_ptrを引き続き使用します。次に例を示します。
#include <iostream>
#include <memory>
class Bla {
public:
Bla() { std::cout << "Constructor!\n"; }
~Bla() { std::cout << "Destructor!\n"; }
};
Bla GetBla() {
Bla bla;
return std::move(bla);
}
int main() {
auto bla = std::make_unique<Bla>(GetBla());
}
この例では、次の出力が生成されます。
Constructor!
Destructor!
Destructor!
Destructor!
ブラのデストラクターがここで3回呼び出されるのはなぜですか?unique_prtの作成方法は正しいですか?
std::move
何も動かしません。あるタイプから別のタイプにキャストするだけです。
std::move
onの使用return
は大きな間違いです。