草庐IT

c++ - shared_from_this 导致 bad_weak_ptr

我正在尝试在asio中保留已连接客户端的列表。我已经从文档(http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/example/cpp03/chat/chat_server.cpp)中改编了聊天服务器示例,这是我最终得到的重要部分:#include#include#include#include#include#includeusingboost::asio::ip::tcp;classtcp_connection;std::set>clients;voidadd_client(boost::shared_ptrclient

C++ std::unique_ptr:为什么 lambda 没有任何尺寸费用?

我正在阅读“有效的现代C++”。在std::unique_ptr相关的条目中声明如果自定义删除器是无状态对象,则不会产生大小费用,但如果它是函数指针或std::function尺寸费用发生。你能解释一下为什么吗?假设我们有以下代码:autodeleter_=[](int*p){doSth(p);deletep;};std::unique_ptrup(newint,deleter_);据我了解,unique_ptr应该有一个decltype(deleter_)类型的对象,并将deleter_分配给该内部对象。但显然这不是正在发生的事情。你能用尽可能小的代码示例解释这背后的机制吗?

C++ std::unique_ptr:为什么 lambda 没有任何尺寸费用?

我正在阅读“有效的现代C++”。在std::unique_ptr相关的条目中声明如果自定义删除器是无状态对象,则不会产生大小费用,但如果它是函数指针或std::function尺寸费用发生。你能解释一下为什么吗?假设我们有以下代码:autodeleter_=[](int*p){doSth(p);deletep;};std::unique_ptrup(newint,deleter_);据我了解,unique_ptr应该有一个decltype(deleter_)类型的对象,并将deleter_分配给该内部对象。但显然这不是正在发生的事情。你能用尽可能小的代码示例解释这背后的机制吗?

c++ - 如何从 boost::shared_ptr 释放指针?

boost::shared_ptr可以释放存储的指针而不删除它吗?我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个boost智能指针类可以让我释放指针?我希望你不要说使用auto_ptr:) 最佳答案 不要。Boost的常见问题解答条目:Q.Whydoesn'tshared_ptrprovidearelease()function?A.shared_ptrcannotgiveawayownershipunlessi

c++ - 如何从 boost::shared_ptr 释放指针?

boost::shared_ptr可以释放存储的指针而不删除它吗?我可以看到文档中不存在释放功能,在FAQ中也解释了为什么它不提供释放功能,例如不能对不​​唯一的指针进行释放。我的指针是独一无二的。我怎样才能释放我的指针?或者使用哪个boost智能指针类可以让我释放指针?我希望你不要说使用auto_ptr:) 最佳答案 不要。Boost的常见问题解答条目:Q.Whydoesn'tshared_ptrprovidearelease()function?A.shared_ptrcannotgiveawayownershipunlessi

c++ - shared_ptr 的别名构造函数是干什么用的?

在此页面(http://www.cplusplus.com/reference/memory/shared_ptr/)的第5段中,它说:Additionally,shared_ptrobjectscanshareownershipoverapointerwhileatthesametimepointingtoanotherobject.Thisabilityisknownasaliasing(seeconstructors),andiscommonlyusedtopointtomemberobjectswhileowningtheobjecttheybelongto.Becauseof

c++ - shared_ptr 的别名构造函数是干什么用的?

在此页面(http://www.cplusplus.com/reference/memory/shared_ptr/)的第5段中,它说:Additionally,shared_ptrobjectscanshareownershipoverapointerwhileatthesametimepointingtoanotherobject.Thisabilityisknownasaliasing(seeconstructors),andiscommonlyusedtopointtomemberobjectswhileowningtheobjecttheybelongto.Becauseof

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

我一直认为std::unique_ptr与使用原始指针相比没有开销。但是,编译如下代码#includevoidraw_pointer(){int*p=newint[100];delete[]p;}voidsmart_pointer(){autop=std::make_unique(100);}使用g++-std=c++14-O3生成以下程序集:raw_pointer():subrsp,8movedi,400calloperatornew[](unsignedlong)addrsp,8movrdi,raxjmpoperatordelete[](void*)smart_pointer():

c++ - 为什么 unique_ptr 实例化编译为比原始指针更大的二进制文件?

我一直认为std::unique_ptr与使用原始指针相比没有开销。但是,编译如下代码#includevoidraw_pointer(){int*p=newint[100];delete[]p;}voidsmart_pointer(){autop=std::make_unique(100);}使用g++-std=c++14-O3生成以下程序集:raw_pointer():subrsp,8movedi,400calloperatornew[](unsignedlong)addrsp,8movrdi,raxjmpoperatordelete[](void*)smart_pointer():

c++ - 使用observer_ptr

构造std::observer_ptr的真正意义是什么?在库基础技术规范V2中?在我看来,它所做的只是包装一个裸露的T*,如果它没有增加动态内存安全性,这似乎是一个多余的步骤。在我的所有代码中,我使用std::unique_ptr我需要明确拥有一个对象的所有权和std::shared_ptr我可以共享对象的所有权。这非常有效,可以防止意外解除对已销毁对象的引用。当然,std::observer_ptr不保证所观察对象的生命周期。如果它是从std::unique_ptr或std::shared_ptr构造的,我会看到这种结构的用途,但任何简单的代码使用T*可能只是继续这样做,如果他们打算