shared_ptr make_unique c++ smart-pointers ifstream unique-ptr

c++ - shared_ptr - make_unique



¿Cómo inicializar std:: unique_ptr en constructor? (2)

Debe inicializarlo a través de la lista de inicialización de miembros :

A::A(std::string filename) : file(new std::ifstream(filename)); { }

Su ejemplo fue un intento de llamar a operator () en un unique_ptr que no es posible.

Actualización: BTW, C ++ 14 tiene std::make_unique :

A::A(std::string filename) : file(std::make_unique<std::ifstream>(filename)); { }

A.hpp:

class A { private: std::unique_ptr<std::ifstream> file; public: A(std::string filename); };

A.cpp:

A::A(std::string filename) { this->file(new std::ifstream(filename.c_str())); }

El error que recibo se arroja:

A.cpp:7:43: error: no match for call to ‘(std::unique_ptr<std::basic_ifstream<char> >) (std::ifstream*)’

¿Alguien tiene alguna idea de por qué esto está ocurriendo? He intentado muchas formas diferentes de hacer que esto funcione, pero fue en vano.


Puedes hacerlo así:

A:A(std::string filename) : file(new std::ifstream(filename.c_str()) { }