草庐IT

libgnuSTL_shared

全部标签

c++ - C++17 中的 std::make_shared() 更改

在cppref,以下内容在C++17之前有效:codesuchasf(std::shared_ptr(newint(42)),g())cancauseamemoryleakifggetscalledafternewint(42)andthrowsanexception,whilef(std::make_shared(42),g())issafe,sincetwofunctioncallsareneverinterleaved.我想知道C++17中引入的哪个更改使这不再适用。 最佳答案 函数参数的计算顺序由P0400R0更改.在更改之

c++ - 为现有变量创建 boost::shared_ptr

我有一个现有的变量,例如inta=3;我现在如何创建boost::shared_ptr到a?例如:boost::shared_ptra_ptr=&a;//thisdoesn'twork 最佳答案 虽然您应该在创建它时将变量放入托管指针中,以便从现有指针中执行此操作。int*a=newint;boost::shared_ptra_ptr(a);那是说你绝对不想将堆栈变量放入shared_ptr会发生不好的事情如果由于某种原因一个函数需要shared_ptr而你只有一个堆栈变量,你最好这样做:inta=9;boost::shared_p

c++ - 为现有变量创建 boost::shared_ptr

我有一个现有的变量,例如inta=3;我现在如何创建boost::shared_ptr到a?例如:boost::shared_ptra_ptr=&a;//thisdoesn'twork 最佳答案 虽然您应该在创建它时将变量放入托管指针中,以便从现有指针中执行此操作。int*a=newint;boost::shared_ptra_ptr(a);那是说你绝对不想将堆栈变量放入shared_ptr会发生不好的事情如果由于某种原因一个函数需要shared_ptr而你只有一个堆栈变量,你最好这样做:inta=9;boost::shared_p

c++ - shared_ptr 和 weak_ptr 失败的小例子

我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()

c++ - shared_ptr 和 weak_ptr 失败的小例子

我在使用shared_ptr时遇到问题和weak_ptr连同enable_shared_from_this.当我用谷歌搜索我所看到的症状时,每个人都建议“当没有shared_from_this()实例拥有你的对象时,你不能使用shared_ptr。但这不是我的情况。考虑这段代码:#include#includeclassMyClass:std::enable_shared_from_this{public:voidthis_fails(){//Doesn'tevenassert(),becauseitthrowsbad_weak_ptrassert(shared_from_this()

c++ - 使用成员函数作为自定义删除器与 std::shared_ptr 的问题

我正在尝试研究如何将std::shared_ptr与自定义删除器一起使用。具体来说,我将它与SDL_Surface一起使用:std::shared_ptr(SDL_LoadBMP(....),SDL_FreeSurface);编译和运行良好。但是,我想尝试自己的删除器,但不知道该怎么做。SDL_FreeSurface的文档可在此处找到:http://sdl.beuc.net/sdl.wiki/SDL_FreeSurface我在其中发现SDL_FreeSurface声明为:voidSDL_FreeSurface(SDL_Surface*surface);作为测试,根据该信息,我尝试了以下

c++ - 使用成员函数作为自定义删除器与 std::shared_ptr 的问题

我正在尝试研究如何将std::shared_ptr与自定义删除器一起使用。具体来说,我将它与SDL_Surface一起使用:std::shared_ptr(SDL_LoadBMP(....),SDL_FreeSurface);编译和运行良好。但是,我想尝试自己的删除器,但不知道该怎么做。SDL_FreeSurface的文档可在此处找到:http://sdl.beuc.net/sdl.wiki/SDL_FreeSurface我在其中发现SDL_FreeSurface声明为:voidSDL_FreeSurface(SDL_Surface*surface);作为测试,根据该信息,我尝试了以下

c++ - 如何将删除器传递给 make_shared?

从C++11开始,由于多种原因,开发人员倾向于将智能指针类用于动态生命周期对象。对于那些新的智能指针类、标准,甚至建议不要使用像new这样的运算符,而是建议使用make_shared或make_unique来避免一些容易出错。如果我们喜欢使用智能指针类,比如shared_ptr,我们可以构造一个,shared_ptrp(newint(12));我们还想将自定义删除器传递给智能指针类,shared_ptrp(newint(12),deleter);另一方面,如果我们喜欢使用make_shared来分配,例如。int,而不是使用new和shared_ptr构造函数,就像上面的第一个表达式,

c++ - 如何将删除器传递给 make_shared?

从C++11开始,由于多种原因,开发人员倾向于将智能指针类用于动态生命周期对象。对于那些新的智能指针类、标准,甚至建议不要使用像new这样的运算符,而是建议使用make_shared或make_unique来避免一些容易出错。如果我们喜欢使用智能指针类,比如shared_ptr,我们可以构造一个,shared_ptrp(newint(12));我们还想将自定义删除器传递给智能指针类,shared_ptrp(newint(12),deleter);另一方面,如果我们喜欢使用make_shared来分配,例如。int,而不是使用new和shared_ptr构造函数,就像上面的第一个表达式,

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