草庐IT

auto_ptr_ref

全部标签

c++ - 将 shared_ptr 传递给 OpenGL?

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

c++ - 为什么必须包含 <initializer_list> 才能使用 auto?

已经有类似的question关于SO,但我想强调braced-init-lists的另一个方面。请考虑以下事项:autox={1};//(1)除非标题,否则这是错误格式(8.5.4/2)已经包括了。但为什么?标准说,模板std::initializer_list不是预定义的。这是否意味着声明(1)引入了一种新类型?在所有其他情况下,auto可以使用如autoy=expr;哪里expr是一个表达式,自动推导的类型已经存在。另一方面,从逻辑的角度来看,编译器必须为结构{1}分配一个隐式类型。,为此std::initializer_list是另一个名字。但是在声明(1)中我们不想命名这个类型

c++ - 如何摆脱容器中的 weak_ptr

我有一个类将weak_ptr存储在一个容器中,如果weak_ptr没有过期,稍后会做一些事情:classExample{public:voidfill(std::shared_ptrthing){member.push_back(thing);}voiddosomething()const{for(constauto&i:member)if(!i.expired());//dosomething.theweak_ptrwillnotbelocked}private:std::vector>member;};如果Example是一个永远存在的对象并且经常使用fill,则vector会不断

c++ - std::unique_ptr::reset 检查托管指针是否为空?

我一直在阅读有关C++11智能指针的内容,以便在我的源代码中使用它们,我一直在阅读的文档是cppreference.com上的文档;在阅读std::unique_ptr时,在resetfunction上有一个文档对我来说似乎不正确(强调我的):Replacesthemanagedobject.Givencurrent_ptr,thepointerthatwasmanagedby*this,performsthefollowingactions,inthisorder:Savesacopyofthecurrentpointerold_ptr=current_ptr.Overwritest

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++ - std::unique_ptr 转移 const 对象的所有权

我有一个A类的对象在方法内部创建。此方法还创建对象的实例B将对象A作为构造函数参数刚刚创建。B必须取得对象的所有权A但它不能修改它。这意味着AB时应删除被删除,但在B的生命周期内它不能修改A.在本例中为std::unique_ptr作为B的成员变量是转移A所有权的正确方法(在std::move的构造函数中使用B)并保证它不会被修改? 最佳答案 是的,这正是您正在寻找的语义。std::unique_ptr声明“我拥有T对象。”指向constA的指针(原始或智能)声明“我无法修改我指向的A”。总而言之,这正是您所追求的。

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++ - 返回元组时如何转移 unique_ptr 的所有权?

我试图返回一个元组,其中一个元素是std::unique_ptr。我想将unique_ptr的所有权转让给调用者。我该怎么做?#include#include#includeusingnamespacestd;classB{public:B(inti):i_(i){}intgetI()const{returni_;}private:inti_;};tuple,int>getThem(){unique_ptrptr(newB(10));returnmake_tuple(ptr,50);}intmain(intargc,char*argv[]){unique_ptrb;intgot=0;t