Ich habe eine Klasse, die ein Objekt innerhalb einer öffentlichen Methode erstellt. Das Objekt ist privat und für die Benutzer der Klasse nicht sichtbar. Diese Methode ruft dann andere privaten Methoden innerhalb der gleichen Klasse und übergeben Sie das erstellte Objekt als Parameter:Übergeben eines intelligenten Zeigers als Argument in einer Klasse: scoped_ptr oder 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);
};
};
ich die richtige Smart-Pointer in diesem Fall glauben, wäre ein scoped_ptr sein, jedoch kann ich nicht tun dies, weil scoped_ptr macht die nicht kopierbar Klasse, wenn auf diese Weise verwendet wird, so sollte ich die Methoden wie diese machen:
void privateMethod1(FooPtr& fooObj);
privateMethod1 speichert nicht das Objekt, weder hält Referenzen davon. Ruft nur Daten aus der Klasse Foo ab.
Der richtige Weg würde wahrscheinlich überhaupt keinen intelligenten Zeiger verwenden und das Objekt im Stapel zuweisen, aber das ist nicht möglich, weil es eine Bibliothek verwendet, die Objekte auf dem Stapel nicht erlaubt, sie müssen auf dem Heap sein .
Schließlich bin ich immer noch verwirrt über die tatsächliche Verwendung von scoped_ptr.
Ich bin neugierig auf die Bibliothek, die 'Objekte auf dem Stapel nicht zulassen'. Sind Objekte, die in der Bibliothek auf dem Heap mit einer Factory zugeordnet sind? Übernimmt die Bibliothek den Zeiger und löscht ihn?Aus welchen Gründen können Sie Stack zugeordnete Objekte nicht verwenden? –