【问题标题】:What is the difference between these two uses of unique_ptr?unique_ptr 的这两种用法有什么区别?
【发布时间】:2018-01-25 13:35:30
【问题描述】:

类“a”包含属性:service_ 类型为 boost::asio_ioservicesock_,一个 unique_ptr 类型 boost::asio::ip::tcp::socket

以下构造函数代码存在 sock_ 正确指向一个新的套接字对象。

a::a() : service_(), sock_(new boost::asio::ip::tcp::socket(service_))
{
}

以下构造函数代码没有。调试器将 sock_ 列为“空”。

a::a() : service_(), sock_(nullptr)
{
     sock_(new boost::asio::ip::tcp::socket(service_));
}

为什么?

【问题讨论】:

  • sock不是sock_
  • 你不是说sock_(new ..)吗?带下划线?这不是您分配给变量的方式。 initialization(你在代码的第一个 sn-p 中所做的)和 assignment 之间是有区别的。
  • 第二个代码示例中有一个不平衡的括号。请贴出真实代码。
  • sock_(nullptr) std::unique_ptr 不需要使用 null 进行初始化。
  • @manni66 真正的代码现在在那里

标签: c++ sockets boost smart-pointers unique-ptr


【解决方案1】:

作为声明:

sock_(new boost::asio::ip::tcp::socket(service_));

根本不是有效的 C++。你有没有想过

sock_.reset(new boost::asio::ip::tcp::socket(service_));

改为?

或者

sock_ = std::make_unique<boost::asio::ip::tcp::socket>(service_);

【讨论】:

  • 谢谢,我感觉有些地方根本不对。
猜你喜欢
  • 2013-09-08
  • 2019-03-31
  • 2020-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多