unique_ptr的这两种用法有什么区别?

时间:2018-01-25 13:35:30

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

Class" a "包含属性: boost :: asio_ioservice service _ sock _ 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_));
}

为什么?

1 个答案:

答案 0 :(得分:2)

作为声明:

  

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_);