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

What is the difference between these two uses of unique_ptr?

Class“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_ 列为 "empty".

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

为什么?

作为声明:

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