class Object { /* */ };
und ein paar abgeleitet:Abgeleitete Klassen und intelligente Zeiger
class Derived1 : public Object { /* */ };
class Derived2 : public Object { /* */ };
Und ich habe eine Funktion, die abgeleiteten Objekte macht und gibt Zeiger für Object
;
Object *make()
{
return new Derived1();
}
Also, auf diese Weise muss ich zurückgegebene Objekt von Smart-Zeiger, aber welchen Rückgabetyp zu verwenden?
TYPE? make()
{
return boost::shared_ptr<Derived1>(new Derived1());
}
Ja, Sie sollten wahrscheinlich einen Zeiger auf die Basisklasse zurückgeben, nicht die abgeleitete Klasse. –
@ John Dibling: Wenn Sie einen Zeiger auf die abgeleitete Klasse zurückgeben können, warum sollten Sie nicht? Was ist der Nachteil? Offensichtlich, wenn Sie nicht können, dann können Sie nicht. –
@Charles: Offensichtlich weiß ich nicht genug über OPs Problem, um definitiv zu antworten. Ich hätte wahrscheinlich nicht einmal kommentieren sollen. Aber du hast Recht, wenn du es nicht kannst, dann kannst du nicht. Aber es ist meine allgemeine Erfahrung im Umgang mit polymorphen Instanziierungen von abstrakten Interfaces (von denen ich annehme, dass OP vielleicht falsch tut), dass "du nicht" öfter als "du kannst" wegen des Codes, der diese Zeiger verwendet, und so In diesen Fällen wird standardmäßig der Basiszeiger zurückgegeben. –