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())
{
}