私は、1つのパブリックメソッド内にオブジェクトを作成するクラスを持っています。オブジェクトはプライベートであり、クラスのユーザーには表示されません。このメソッドは、同じクラス内の他のプライベートメソッドを呼び出し、パラメータとして作成したオブジェクトを渡す:スマートポインタをクラス内の引数として渡す:scoped_ptrまたはshared_ptr?
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の実際の使い方についてはまだ混乱しています。
「スタック上のオブジェクトを許可していない」ライブラリが不思議です。ライブラリ内のオブジェクトは、ヒープ上に工場で割り当てられていますか?ライブラリはポインタの所有権を持ち、それを削除しますか?スタックに割り当てられたオブジェクトを使用できない理由は何ですか? –