【发布时间】:2015-05-31 12:24:59
【问题描述】:
我正在使用 unique_ptr,但得到了一些奇怪的结果。这是代码:
class Sniffer
{
public:
Sniffer()
{
cout << "Sniffer()" << endl;
s = "String!";
}
void operator()()
{
cout << "operator()(): " << s << endl;
}
~Sniffer()
{
cout << "~Sniffer()" << endl;
}
private:
string s;
};
int main()
{
cout << "Begin scope!" << endl;
{
Sniffer& h = *std::unique_ptr<Sniffer>(new Sniffer()); // 1
//std::unique_ptr<Sniffer> p(new Sniffer()); // 2
//Sniffer& h = *p; // 2
h();
}
cout << "End scope!" << endl;
return 0;
}
我不明白为什么使用代码“1”,析构函数在 operator()() 之前被调用,而“End Scope!”根本不打印。代码不会崩溃,它会执行到最后一行,我得到的输出是:
Begin scope!
Sniffer()
~Sniffer()
operator()(): Press any key to continue . . .
另一方面,代码“2”的行为符合预期:
Begin scope!
Sniffer()
operator()(): String!
~Sniffer()
End scope!
Press any key to continue . . .
我使用参考的原因只是因为我觉得h() 比(*p)() 或p->operator()() 感觉更自然。谢谢。
【问题讨论】:
标签: c++ reference destructor move-semantics unique-ptr