1 つのパブリック メソッド内にオブジェクトを作成するクラスがあります。オブジェクトは非公開で、クラスのユーザーには表示されません。次に、このメソッドは同じクラス内の他のプライベートメソッドを呼び出し、作成されたオブジェクトをパラメーターとして渡します。
class Foo {
...
};
class A {
private:
typedef scoped_ptr<Foo> FooPtr;
void privateMethod1(FooPtr fooObj);
public:
void showSomethingOnTheScreen() {
FooPtr fooObj(new Foo);
privateMethod1(fooObj);
};
};
この場合の正しいスマート ポインターは scoped_ptr になると思いますが、scoped_ptr をそのように使用するとクラスがコピー不可になるため、これを行うことはできません。メソッドを次のように作成する必要があります。
void privateMethod1(FooPtr& fooObj);
privateMethod1 はオブジェクトを保存せず、その参照も保持しません。クラスFooからデータを取得するだけです。
正しい方法は、おそらくスマート ポインターをまったく使用せず、オブジェクトをスタックに割り当てることですが、スタック上のオブジェクトを許可しないライブラリを使用するため、それは不可能です。オブジェクトはヒープ上にある必要があります。
結局のところ、scoped_ptr の実際の使用法についてはまだ混乱しています。