草庐IT

libSTLport_shared

全部标签

c++ - 将 make_shared 与 protected 构造函数 + 抽象接口(interface)一起使用

给定一个抽象接口(interface)和一个从该接口(interface)派生的实现,其中构造函数受到保护(只能从类工厂创建这些对象-以实现DI模式),我如何在工厂函数中使用make_shared?例如:classIInterface{public:virtualvoidMethod()=0;};classInterfaceImpl:publicIInterface{public:virtualvoidMethod(){}protected:InterfaceImpl(){}};std::shared_ptrCreate(){std::shared_ptrobject=std::mak

c++ - 使用重载放置新/删除提升 shared_ptr

我像这样将boostshared_ptr与我自己的内存管理器一起使用(精简示例,我希望其中没有错误):classMemoryManager{public:/**Allocatesomememory.*/inlinevoid*allocate(size_tnbytes){returnmalloc(nbytes);}/**Removememoryagian.*/inlinevoiddeallocate(void*p){free(p);}};MemoryManagerglobalMM;//Newoperatorsinlinevoid*operatornew(size_tnbytes,ogl2

c++ - 返回 vector<Foo> 或 shared_ptr<vector<Foo>>?

在一个函数中,哪个“return”更合适?一个。vector?B.shared_ptr>?换句话说,哪个文案不那么重,你会怎么做,为什么? 最佳答案 我想返回shared_ptr>很少有用。如果有几个对象可以保存它们可以操纵的共享vector,我只会这样做。对我来说,这表明存在设计缺陷。更好的选择可能是通过const引用返回。这避免了(可能很昂贵的)复制操作,但不允许访问者更改vector。如果您要返回本地std::vector您也可以通过参数返回它。如果真要回shared_ptr>,考虑是否shared_ptr>会完成这项工作(载

c++ - 如果我将 std::shared_ptr 重置为自身会发生什么

以下程序因错误的glibcdoublefree错误而崩溃:#include#includeclassfoo{public:foo(){std::cout();std::cout由此我得到以下输出(后跟glibc错误):fooconstructedBeforeresetfoodestructedAfterresetfoodestructed很明显,在这种情况下,对象被销毁了两次。一次通过重置,一次通过std::shared_ptr超出范围。这实际上是我所期望的。关于cppreference但是我找到了以下文本(位于http://en.cppreference.com/w/cpp/memo

c++ - 将 shared_ptr 传递给 OpenGL?

如果我的代码通常会像这样运行:char*log=newchar[logLength];glGetProgramInfoLog(...,...,log)//PrintLogdelete[]log;如何使用C++11智能指针实现相同的结果?谁知道在我有机会删除那段内存之前会发生什么。所以我想我需要向下转换为C风格的指针? 最佳答案 如果您的代码在您的代码片段中确实看起来像那样,shared_ptr对这种情况有点矫枉过正,因为看起来您不需要分配内存的共享所有权。unique_ptr对数组有部分专门化,非常适合此类用例。当托管指针超出范围时

c++ - 将 shared_ptr 设置为指向现有对象

对于下面的代码,我想知道如何设置std::shared_ptr以指向两个成员函数中的给定对象。在main函数中分配的Vector3对象直到程序结束才会被删除。#include#includeusingstd::vector;usingstd::shared_ptr;classVector3{//...};classFace{vector>vtx;public:voidaddVtx(constVector3&vt){//vtx.push_back();0&&vvec(3);Faceface;face.addVtx(vec[0]);face.setVtx(0,vec[0])return0;

c++ - std::shared_ptr<T>:指向 T 的右值指针的隐式构造函数

我非常支持制作std::shared_ptr的想法接受T*的构造函数明确的。当您正在寻找堆损坏的原因时,它有助于避免不眠之夜。ScottMeyers对此给出了很好的解释。但是……如果我给它一个rvalue这不是明确的指针吗?我可以做这样的事情:///(1)std::shared_ptrt=newT;或///(2)T*giveaway=newT;std::shared_ptrt=std::move(giveaway);或者现实生活中更痛苦的案例///(3)voidfoo(std::shared_ptrt);///...foo(newT);对于我来说,所有这些案例都足够明确了。案例(1)是

c++ - Qt 信号 lambda 导致 shared_ptr 泄漏?

我有以下代码:#include#include#include#includeclassDocument{public:Document(){qDebug("Document");}~Document(){qDebug("~Document");}QUndoStackmUndostack;};classDocumentRepository{public:DocumentRepository(){qDebug("DocumentRepository");}~DocumentRepository(){qDebug("~DocumentRepository");}voidAddDoc(std

c++ - 使用 shared_ptr 的内部指针的操作是原子的吗?

同时复制和重置shared_ptr是否安全?即考虑下面的代码//Mainthread(beforecreatinganyotherthreads)shared_ptra(newA(1));//Thread1shared_ptra_copy=a;//Thread2a.reset(new(A(2));其中线程1和2并行运行。我可以确定a_copy将存储指向较旧的A(1)或较新的A(2)共享对象的指针吗? 最佳答案 来自cppreference:Allmemberfunctions(includingcopyconstructorandc

c++ - shared_ptr 中对 const int 的 undefined reference

我有一个配置类//config.hppclassConfig{public:staticconstexprinta=1;staticconstexprintb=1;}并包含在main.cpp中//main.cpp#include"config.hpp"intmain(){std::coutstream=std::make_shared(Config::a);//compileerror}编译器说未定义对Config::a的引用它在使用cout时有效,但在shared_ptr构造函数中时无效。我不知道为什么会这样。 最佳答案 请注意s