32 c++ smart-pointers ifstream 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*)’
有没有人知道为什么会这样?我已经尝试了很多不同的方法让它工作,但无济于事.
0x4*_*2D2 39
您需要通过member-initializer列表初始化它:
A::A(std::string filename) :
    file(new std::ifstream(filename));
{ }
你的例子是试图召唤operator ()一个unique_ptr不可能的东西.
更新:BTW,C++ 14具有std::make_unique:
A::A(std::string filename) :
    file(std::make_unique<std::ifstream>(filename));
{ }
你可以这样做:
A:A(std::string filename)
    : file(new std::ifstream(filename.c_str())
{
}