Foo
RAII に従うクラス、たとえば を実装しようとしていますが、クラスのオブジェクトは値によってクライアントに返されます。
class SomeClass {
public:
class Foo {
public:
~Foo() { /* follow raii */ }
private:
friend class SomeClass;
Foo() { /* follow raii */ }
};
Foo getFoo() { return Foo(); }
};
私の当面の質問はFoo
、呼び出し時にタイプのオブジェクトが1つだけ構築されることを確認する方法はありますSomeClass::getFoo()
か? ほとんどのコンパイラは、1 つのオブジェクトのみを構築する必要があることを認識していると思いますが、ほとんどの場合、これは保証されていません。私が取ることができるより良いアプローチはありますか?
boost::shared_ptr<Foo>
共有ポインターを構築するときに、を返してオブジェクトを割り当てようとしましたがFoo
、これはうまく機能します。ただし、ヒープ割り当てが必要であり、インターフェイスがクリーンでなくなるため、理想的ではないようです。
ありがとう!
明確化
Visual Studio 2005 コンパイラなので、R-val 参照と C++11 関連の機能は利用できないと思います。