32 c++ smart-pointers ifstream unique-ptr
A.hpp:
class A {
private:
std::unique_ptr<std::ifstream> file;
public:
A(std::string filename);
};
Run Code Online (Sandbox Code Playgroud)
A.cpp:
A::A(std::string filename) {
this->file(new std::ifstream(filename.c_str()));
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误被抛出:
A.cpp:7:43: error: no match for call to ‘(std::unique_ptr<std::basic_ifstream<char> >) (std::ifstream*)’
Run Code Online (Sandbox Code Playgroud)
有没有人知道为什么会这样?我已经尝试了很多不同的方法让它工作,但无济于事.
0x4*_*2D2 39
您需要通过member-initializer列表初始化它:
A::A(std::string filename) :
file(new std::ifstream(filename));
{ }
Run Code Online (Sandbox Code Playgroud)
你的例子是试图召唤operator ()
一个unique_ptr
不可能的东西.
更新:BTW,C++ 14具有std::make_unique
:
A::A(std::string filename) :
file(std::make_unique<std::ifstream>(filename));
{ }
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
A:A(std::string filename)
: file(new std::ifstream(filename.c_str())
{
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
33447 次 |
最近记录: |