У меня есть класс, который создает объект внутри одного открытого метода. Объект является закрытым и не виден пользователям класса. Затем этот метод вызывает другие приватные методы внутри того же класса и передает созданный объект в качестве параметра:
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.