草庐IT

c++ - 创建 shared_ptr 到堆栈对象

在我的方法中,Player对象的创建方式如下:Playerplayer(fullName,age);我的老师给了我们一段带有构造函数的代码,该构造函数将shared_ptr传递给玩家对象。//constructoroftheclassSomeClass(conststd::shared_ptrclient,std::shared_ptrplayer)假设我们要调用SomeClass的构造函数并传递我们在堆栈上创建的播放器对象。从堆栈对象创建shared_ptr是否安全/可能/好?为了让问题更容易理解,假设我们有两个大代码项目,我们想合并它们,以便从一个项目调用另一个项目的方法,我们是否

c++ - 从原始指针创建 weak_ptr<>

我想将原始指针成员包装到一些智能指针,以防止在开发类中删除。指针下对象的所有者在类之外。所以,看起来像boost::shared_ptr和std::auto_ptr不适合。以下是简化的示例:classFoo{boost::weak_ptrm_bar;public:voidsetBar(constBar*bar){//barcreatedonheapm_bar=bar;//naturallycompilationerror}};当然会导致编译错误。从原始指针(如果存在)初始化weak_ptr的正确方法是什么? 最佳答案 你不能那样做,

c++ - 防止多个 shared_ptr 指向同一个对象的最佳方法

将相同的指针发送到两个不同的shared_ptr是不好的,它会导致双重释放,如下所示:int*p=newint;std::shared_ptrp1(p);std::shared_ptrp2(p);//BAD您可以使用std::enable_shared_from_this实现相同的目的:classGood:publicstd::enable_shared_from_this{public:std::shared_ptrgetptr(){returnshared_from_this();}};intmain(){std::shared_ptrgp1(newGood);std::share

C++11 std::shared_ptr + boost::序列化

这个问题在这里已经有了答案:Howcanboost::serializationbeusedwithstd::shared_ptrfromC++11?(7个答案)boostserializeandstd::shared_ptr(2个答案)关闭9年前。嗨,有人已经成功地使用boost::serialization序列化了C++11std::shared_ptr。那里有很多过时的帖子,但没有一个具有可接受的解决方案。我不打算讨论为什么我要使用std::shared_ptr只是接受它!我找到了另一个帖子:boostserializeandstd::shared_ptr但它没有回答我如何序列化

c++ - 使用 shared_ptr 和 glutInit 导致段错误

问了this在我尝试了很多东西并发现问题与glutInit有关之前。采取以下代码示例:main.cpp#include#include#includeusingnamespacestd;intmain(intargcp,char**argv){shared_ptrabc;glutInit(&argcp,argv);cout编译:g++-std=c++11-g-Wall-oappxmain.cpp-lGL-lGLU-lglut使用g++5.2.1、ubuntu15.10导致可执行文件立即崩溃(没有“Hello!”输出)只是注释掉这一行shared_ptrabc;将修复崩溃。因为我想在项目

c++ - 如何在 c++(0x) 中使用多个返回值进行初始化

tuple在boost和TR1/c++0x中提供了一种方便的(对于函数的编写者)从函数返回两个值的方法——但是它似乎损害了调用者语言的一个主要特性:简单使用的能力初始化变量的函数:Thappy();constautomeaningful_name(happy());//RVOmeansnoexcesscopies但对于:tuplesad();我们要么放弃为我们的返回值选择一个有意义的名称的能力,并使用get()无处不在:constautotwo_unrelated_things(sad());或者做一个临时的:constautounwanted_named_temporary(sad(

c++ - shared_ptr<T> 到 shared_ptr<T const> 和 vector<T> 到 vector<T const>

我正在尝试为我的软件定义一个好的设计,这意味着要小心对某些变量的读/写访问。这里我简化了讨论的程序。希望这对其他人也有帮助。:-)假设我们有一个类X,如下所示:classX{intx;public:X(inty):x(y){}voidprint()const{std::cout我们还可以说,将来这个类将被子类化为X1、X2...,它可以重新实现print()和foo().(为了简单起见,我在这里省略了必需的virtual关键字,因为这不是我面临的实际问题。)因为我们将使用多态性,所以让我们使用(智能)指针并定义一个简单的工厂:usingXPtr=std::shared_ptr;usin

c++0x标准库引用手册

多年来,我一直在使用C++编写代码,最近听说C++标准即将发布新修订版。我研究了标准草案,发现有很多新东西可以使我的编程更容易。所以我想在新标准出来之前习惯它。但是,如果没有像样的引用手册,就很难使用新的标准库进行编码。我用谷歌搜索,只找到了一些页面,例如Wikipedia'sC++0xpage不是引用手册。有人知道任何C++0x标准库引用手册吗?我正在寻找类似于MSDN的StandardC++LibraryReference的东西. 最佳答案 在wiki-basedcppreference.com上获得C++0x的新特性方面取得了

C++0x 智能指针比较 : Inconsistent, 原理是什么?

在C++0x(n3126)中,可以比较智能指针,无论是关系还是相等。但是,这样做的方式对我来说似乎不一致。例如,shared_ptr定义operator相当于:templatebooloperator&a,constshared_ptr&b){returnstd::less()(a.get(),b.get());}使用std::less提供关于指针值的总排序,这与未指定的Vanilla关系指针比较不同。然而,unique_ptr将相同的运算符定义为:templatebooloperator&a,constunique_ptr&b){returna.get()它还以类似的方式定义了其他关

c++ - std::bind 通常与仅移动类型一起使用,特别是 std::unique_ptr 吗?

我正在尝试使用boost::asio并遇到了一些问题。我正在尝试编译以下代码:std::unique_ptrbuffer=buffers.pop();std::functiont=std::bind(&tcp_client::handle_read_done,this,std::placeholders::_1,std::placeholders::_2,std::move(buffer));如果我排除std::move(buffer),一切正常,当然是从handle_read_done的签名和作为std::bind中传递的参数。当试图将它传递给boost::asio::async_r