关于std::make_shared初始化结构体智能指针时空括号的疑问
你代码里的std::make_shared<framework::tcpip::socket::SocketLwip>(),后面的()核心作用就是触发SocketLwip的无参构造函数,完成结构体实例的初始化。
具体来说:
std::make_shared是用来在堆上创建对象并返回对应shared_ptr的模板函数,它需要明确初始化对象的方式。这里的空括号(),就是告诉它调用SocketLwip的无参构造器创建实例——刚好你的结构体定义了公有无参构造,完全匹配这个调用逻辑。- 这行代码最终会在堆上生成一个
SocketLwip结构体实例,同时把这个实例的所有权交给socket_LWIP这个shared_ptr智能指针。
如果去掉这个括号,语法上会直接报错,因为std::make_shared是函数,必须通过括号完成调用,空括号就对应传递空参数列表,适配无参构造的场景。
内容的提问来源于stack exchange,提问作者71GA
相关产品推荐
相关产品推荐

