Как инициализировать std :: unique_ptr в конструкторе?
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()));
}
Ошибка, которую я получаю:
A.cpp:7:43: error: no match for call to ‘(std::unique_ptr<std::basic_ifstream<char> >) (std::ifstream*)
Кто-нибудь имеет представление о том, почему это происходит? Я пробовал много разных способов заставить это работать, но безрезультатно.
Ответы
Ответ 1
Вы должны инициализировать его через список инициаторов-членов:
A::A(std::string filename) :
file(new std::ifstream(filename));
{ }
Ваш пример был попыткой вызвать operator()
на unique_ptr
что невозможно.
Обновление: BTW, С++ 14 имеет std::make_unique
:
A::A(std::string filename) :
file(std::make_unique<std::ifstream>(filename));
{ }
Ответ 2
Вы можете сделать это следующим образом:
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}