ich nicht in jeder Klasse zu schreiben, die ich Shared_ptr verwenden oder unique_ptr dies:Ist es OK, von einem Templat-Smart-Pointer-Typen vererben wollen nur Klasse
std::shared_ptr<Foo> p = CreateFoo();
Ich benutze dieses:
template <typename T>
struct ptr_types
{
typedef std::shared_ptr<T> sptr;
typedef std::unique_ptr<T> uptr;
};
class A: public ptr_types<A>
{
public:
A(){}
int m;
};
Dann kann ich dies tun:
A::sptr p(new A);
Ist es ein Problem von einem Design-Standpunkt aus meinen Klassen erbt, die Smart-Pointer verwenden s? Gibt es eine elegantere Lösung?
EDIT:
Ja ich verwenden kann:
auto p = std::make_shared<A>();
aber was ist, wenn ich dieses:
std::shared_ptr<A> A::CreateA()
{
....
}
void A::Sink(std::unique_ptr<A> p)
{
...
}
besser, so etwas zu haben?
A::sptr A::CreateA()
{
...
}
void A::Sink(A::uptr p)
{
...
}
Vielleicht ist die Frage nicht sinnvoll .. und es ist mir faul die std zu schreiben :: blabla die ganze Zeit in Funktionstyp Returns oder Parameter.
Was ist, wenn 'A' von einer anderen Klasse, abgeleitet von' ptr_types', erbt? –
Das ist clever IMHO. – didierc
Mmm, das wird ein Problem sein, wird es eine Namenskollision geben, nicht wahr? – FrameBuffer