Mam klasy, która tworzy obiekt wewnątrz jednej publicznej metody. Obiekt jest prywatny i niewidoczny dla użytkowników klasy. Metoda ta wywołuje inne prywatne metod wewnątrz tej samej klasy i przekazać utworzony obiekt jako parametr:Przekazywanie inteligentnego wskaźnika jako argumentu w klasie: scoped_ptr lub 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);
};
};
wierzę prawidłowe inteligentny wskaźnik w tym przypadku byłoby scoped_ptr jednak nie mogę zrobić to dlatego scoped_ptr sprawia, że klasa non copyable jeśli używany w ten sposób, więc mam uczynić metody tak:
void privateMethod1(FooPtr& fooObj);
privateMethod1 nie przechowuje obiekt, nie przechowuje referencje niego. Po prostu pobiera dane z klasy Foo.
Prawidłowy sposób prawdopodobnie nie używałby w ogóle inteligentnego wskaźnika i przydzielania obiektu do stosu, ale nie jest to możliwe, ponieważ używa biblioteki, która nie pozwala na obiekty na stosie, muszą one znajdować się na stertach .
W końcu nadal jestem zdezorientowany rzeczywistym użyciem scoped_ptr.
Jestem ciekawa biblioteki, która "nie pozwala na obiekty na stosie". Czy obiekty są przydzielane wewnątrz biblioteki na stercie za pomocą fabryki? Czy biblioteka przejmuje na własność wskaźnik i usuwa go?Jakie są powody, dla których nie można używać obiektów przydzielonych do stosów? –