Tengo una clase que crea un objeto dentro de un método público. El objeto es privado y no visible para los usuarios de la clase. Este método llama a continuación, otros métodos privado dentro de la misma clase y pasar el objeto creado como un parámetro:Pasar un puntero inteligente como argumento dentro de una clase: scoped_ptr o 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);
};
};
Creo que el puntero inteligente correcto en este caso sería un scoped_ptr, sin embargo, no puedo hacer esto porque hace que el scoped_ptr no copiable clase si se usa de esa manera, por lo que debería hacer que los métodos como éste:
void privateMethod1(FooPtr& fooObj);
privateMethod1 no almacena el objeto, ni mantiene las referencias de la misma. Simplemente recupera datos de la clase Foo.
La forma correcta sería probablemente no usar un puntero inteligente y asignar el objeto en la pila, pero eso no es posible porque utiliza una biblioteca que no permite objetos en la pila, deben estar en el montón .
Después de todo, todavía estoy confundido sobre el uso real de scoped_ptr.
Tengo curiosidad acerca de la biblioteca que 'no permite objetos en la pila'. ¿Hay objetos asignados dentro de la biblioteca en el montón con una fábrica? ¿La biblioteca toma posesión del puntero y lo elimina?¿Cuáles son las razones por las que no puede usar objetos asignados apilados? –