std::auto_ptr mit typedef "umbenennen"



  • Ich würde ihn ja in DeprecatedDumbPointer umbenenennen.



  • 🙂



  • scoped_ptr und shared_ptr aus Boost.

    Und sonst halt schnell eine Klasse schreiben, die im Destruktor delete aufruft und privaten, nicht implementierten Kopierkonstruktor und Zuweisungsoperator hat. Evtl. noch vor dem Löschen vollständigen Typen mit sizeof sicherstellen.



  • 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 .

    👍 🕶


Anmelden zum Antworten