【问题标题】:How can I get the address of scoped_ptr?如何获取 scoped_ptr 的地址?
【发布时间】:2016-05-28 16:44:15
【问题描述】:

我正在研究智能指针,尤其是scoped_ptr。 我读到了运算符*->。 我试图运行这段代码:

int main(){
  boost::scoped_ptr<int>number(new int);
  *number = 432;
  std::cout<<"Value: "<<*number <<std::endl<< " Adress: "<< number <<std::endl;
  return 0;
}

结果是:

Value: 432 Adress: 1

这是不正确的。

如何使用-&gt; 运算符来获取正确的地址?

【问题讨论】:

  • 你要智能指针的地址,还是int的地址?你现在正在做的是打印智能指针的数值,它似乎是 1(可能是引用计数)。
  • int* p = number.operator -&gt; ();
  • 对于scoped_ptr&lt;&lt; 没有过载。相反,它被隐式转换为bool(有这样的转换)并且bool默认打印为01。由于指针不为空,它转换为true

标签: c++ smart-pointers memory-address scoped-ptr


【解决方案1】:

使用get()成员函数:

boost::scoped_ptr<int>number(new int);
*number = 432;
std::cout<<"Value: "<<*number <<std::endl<< " Adress: "<< number.get() <<std::endl;

更多详情here

【讨论】:

  • 谢谢!在我的幻灯片上没有get() 函数。很高兴知道!
  • @linofex 如果您没有get() 功能,您可以通过其他方式获取地址:std::cout&lt;&lt;" Adress: "&lt;&lt; &amp;*number&lt;&lt;std::endl
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多