std::auto_ptr mit typedef "umbenennen"
-
Hey Leute ich wollte mal fragen ,ob man diese Smartpointer template auto_ptr mit typedef "umbenennen" kann.
Ich meine sowas wie:
typedef std::auto_ptr ISmartPointer
Hab es auch schon mit template class versucht:
template<class T>
typedef std::auto_ptr<T> ISmartPointerGeht leider nicht, wie müsste man das machen ?=?
-
Nein, es geht nicht. Einzig
#define auto_ptr ISmartPointerwürde halbwegs gehen.Es gäbe einen Weg mit C++11, aber da gibt es
auto_ptrnicht mehr, sondern den besserenunique_ptr.Allerdings fällt mir kein sinnvoller Grund ein, auto_ptr umzubenennen. Das führt doch nur zu Verwirrung und ist mit C++11 wieder obsolet.
-
Nun ja, Template typedefs kommen erst mit C++11, das sieht dann so aus:
template <int N> using ISmartPointer = std::auto_ptr<T>;Allerdings wird das von VS noch nicht unterstützt, was nicht gerade toll ist. Wo wir gerade dabei sind, das könnte für dich interessant sein: http://www.gotw.ca/gotw/079.htm
Und auto_ptr ist zu recht deprecated und sollte nicht verwendet werden. Stattdessen nimm lieber unique_ptr oder shared_ptr, die bringt wohl fast jeder aktuelle Compiler mit.
-
Also mit VS2008 funktionier #define ISmartPointer auto_ptr wunderbar.Jedoch gibt es da noch keine unique/shared_ptr.Gibt es für VS2008 irgendwas anderes ??? Es geht mir nur darum, dass Instanzen von Klassen später freigegeben werden, sonst nichts
-
Ich würde ihn ja in DeprecatedDumbPointer umbenenennen.
-

-
scoped_ptrundshared_ptraus Boost.Und sonst halt schnell eine Klasse schreiben, die im Destruktor
deleteaufruft und privaten, nicht implementierten Kopierkonstruktor und Zuweisungsoperator hat. Evtl. noch vor dem Löschen vollständigen Typen mitsizeofsicherstellen.
-
WTF ich mach jetzt folgendes:
ISmartPointer<IGameManager*> _gameManager(new IGameManager());
Wie kann ich jetzt methoden der Instanz _gameManager aufrufen ???
_gameManager->...fail
_gameManager.get()->...fail???
-
Ohh man es ist schon zu spät.Der Stern muss natürlich weg, da es ja schon als Pointer deklariert wird.....
-
Eine aktuelle Version von VS kannst/darfst du nicht nutzen? Würde sich irgendwie anbieten.
-
Ne kann ich gerade nicht, da ich ein paar libs brauche ,die bissher nur auf VS2008 compiliert wurden.
-
Wäre das Portieren der Libs auf VS10 so aufwändig?
-
Template Alias (C++11) Ersatz für C++03
#include <memory> template <typename T> struct s { typedef std::auto_ptr<T> smart_pointer; }; int main() { s<int>::smart_pointer ptr(new int(3)); }Dass besser die Smart Pointer von Boost verwendet werden sollen wurde ja schon erwähnt. Hier nur der allgemeine Ersatz für die C++11 Template Alias.
-
Man kann auch sowas Ähnliches auch durch Ableiten bekommen:
template< class T > class my_ptr : public std::auto_ptr< T > { public: template< class... Args > my_ptr( Args&&... args ) : std::auto_ptr< T >( std::forward< Args >( args )... ) {} //das gleiche noch für assignment };
-
GorbGorb schrieb:
[...]
C++03 ?
-
Swordfish schrieb:
GorbGorb schrieb:
[...]
C++03 ?
Falls variadic templates verfügbar sind, template typedefs aber nicht, ist das eine Lösung. Ansonsten funktioniert es wahrscheinlich auch so passabel (oder man macht noch mal ne Funktion für 2 Parameter rein), bis c++11 verfübar ist:
template< class T > class my_ptr : public std::auto_ptr< T > { public: template< class Arg > my_ptr( const Arg& arg ) : std::auto_ptr< T >( arg ) {} template< class Arg > my_ptr( Arg& arg ) : std::auto_ptr< T >( arg ) {} //das gleiche noch für assignment };
-
theta schrieb:
Template Alias (C++11) Ersatz für C++03
#include <memory> template <typename T> struct s { typedef std::auto_ptr<T> smart_pointer; }; int main() { s<int>::smart_pointer ptr(new int(3)); }Dass besser die Smart Pointer von Boost verwendet werden sollen wurde ja schon erwähnt. Hier nur der allgemeine Ersatz für die C++11 Template Alias.
Jetzt noch das typename davorschreiben.
Furchtbar das der MSVC das durchgehen lässt, aber Microsoft lässt es ja selbst bei Codesamples weg ...
-
Ethon schrieb:
Jetzt noch das typename davorschreiben.
Furchtbar das der MSVC das durchgehen lässt, aber Microsoft lässt es ja selbst bei Codesamples weg ...Furchtbar wäre, wenn sie es nicht durchliessen. Hier brauchts nämlich kein
typename.
-
Nexus schrieb:
Ethon schrieb:
Jetzt noch das typename davorschreiben.
Furchtbar das der MSVC das durchgehen lässt, aber Microsoft lässt es ja selbst bei Codesamples weg ...Furchtbar wäre, wenn sie es nicht durchliessen. Hier brauchts nämlich kein
typename.
