boost :: scoped_ptr指针的值究竟是什么?

And*_*alo 0 c++ boost smart-pointers

我试图理解的语法boost::scoped_ptr.让我们定义并向标准输出写入scoped_ptr指针及其指向的值:

#include <boost/scoped_ptr.hpp>
#include <iostream>

int main()
{
  boost::scoped_ptr<int> p{new int{1}};

  std::cout << p.get() << '\n'; // ok
  std::cout << p << '\n';       // error   


  std::cout << *p.get() << '\n'; // ok
  std::cout << *p << '\n';       // ok. *p==*p.get()
}
Run Code Online (Sandbox Code Playgroud)

题.为什么现在*p.get()==*pstd::cout << p << '\n';不会编译?

我的工作on g++ -std=c++11 -O2 -Wall -pedantic.

Mik*_*our 7

为什么&pp.get()产生不同的结果?

&pscoped_ptr对象的地址.p.get()int它指向的对象的地址.

为什么现在*p.get()==*pstd::cout << p << '\n';不会编译?

这两者是无关的.

*p定义与以下内容相同*p.get():取消引用作用域指针访问它指向的对象,并且取消引用指向同一对象的原始指针.

cout << p不编译,因为<<流式范围指针没有重载.

我正在尝试 g++ -std=c++11 -O2 -Wall -pedantic

然后考虑std::unique_ptr(在C++ 11中引入)而不是boost::scoped_ptr.它更标准,也可移动.