草庐IT

malloc_ptr_t

全部标签

c++ - 大 vector 的返回值优化与 auto_ptr

如果我使用auto_ptr作为填充大vector的函数的返回值,这会使该函数成为源函数(它将创建一个内部auto_ptr并在返回非constauto_ptr时移交所有权)。但是,我不能将此函数与STL算法一起使用,因为为了访问数据,我需要取消对auto_ptr的引用。我猜一个很好的例子是大小为N的vector场,每个vector有100个分量。如果N很大,则函数按值或按ref返回每个100个分量vector是不一样的。此外,当我尝试这个非常基本的代码时:classt{public:t(){std::coutautoFun(){returnstd::auto_ptr(newt());}a

c++ - const 正确性和 shared_ptr,设计问题?

我最近开始尝试在我的代码中强制执行const正确性。在函数定义中,我将常量指针提供给类LorentzM的常量对象。:voidAnalysisObject::SetOwnedPointer(constintmaptotree_In,constLorentzM*constmomentum_In){owned_pp4_original.reset(momentum_In);maptotree=maptotree_In;}哪里owned_pp4_original是shared_ptrowned_pp4_original;我这样做是因为这个函数SetOwnedPointer永远不应该改变Lore

c++ - std::vector<std::unique_ptr<T>> 有更好的替代方案吗?

我正在寻找需要满足以下要求的容器(针对游戏开发,尤其是实体管理):快速迭代没有存储元素的拷贝不会使指向元素的指针失效删除和插入元素例子:Containercontainer;//ThispointerwillalwayspointtotheplayerEntity*player{newEntity};container.add(player);//Setsomeentitiesto"dead"for(auto&e:container)if(e->type=="Enemy")e->die();//Useerase-removeidiomon"dead"entitiescontainer.

c++ - 在构造函数初始化列表上 move shared_ptr

最近我看到了几个这样的代码示例,其中std::move用于构造函数初始化列表(而不是move构造函数)。classA{public:A(std::shared_ptrres):myRes(std::move(res)){//...}private:std::shared_ptrmyRes;}我得到的信息是这个结构是出于优化原因而设计的。我个人尽可能少用std::move。我威胁他们作为Actor(正如斯科特迈耶斯所说),并且只在调用者代码中(唯一的异常(exception)是move构造函数)。对我来说,这看起来像是某种混淆或微优化,但也许我错了。如果没有std::move,编译器不会

c++ - 使用包含 std::unique_ptr 的结构的 std::vector 声明类时出错

虽然我已经使用C#工作了几年,但用C++完成工作有时对我来说仍然很困难。我完全接受智能指针的使用,但现在我面临以下难题我有一个结构Foo,例如structFoo{Foo(std::unique_ptrbar):m_myBar(std::move(bar)){}private:std::unique_ptrm_myBar;};在另一个类中,我想要一个包含Foo实例的vector,但是下面这行std::vectorm_Foos;产生编译错误,指出拷贝构造函数被删除。在SO线程“WhycanInotpush_backaunique_ptrintoavector?”中给出了解释和补救措施。但是

c++ - 为什么在所有情况下都允许指向 shared_ptr 构造的原始指针?

我正在阅读Top10dumbmistakestoavoidwithC++11smartpointer.第5条内容如下:Mistake#5:Notassigninganobject(rawpointer)toashared_ptrassoonasitiscreated!intmain(){Aircraft*myAircraft=newAircraft("F-16");shared_ptrpAircraft(myAircraft);...shared_ptrp2(myAircraft);//willdoadoubledeleteandpossiblycrash}建议是这样的:Usemake

c++ - unique_ptr 和 OpenSSL 的 STACK_OF(X509)*

我使用一些using语句和unique_ptr来与OpenSSL一起工作,如suggestedinanotherquestion.否则,代码会变得非常丑陋,而且我不太喜欢goto语句。到目前为止,我已经尽可能地更改了我的代码。以下是我使用的示例:usingBIO_ptr=std::unique_ptr;usingX509_ptr=std::unique_ptr;usingEVP_PKEY_ptr=std::unique_ptr;usingPKCS7_ptr=std::unique_ptr;...BIO_ptrtbio(BIO_new_file(some_filename,"r"),::

c++ - 从 shared_ptr 到 weak_ptr 多态性的转换

我很难解决这个问题。假设我有这个vectorstd::vector>cars;Car是一个抽象类。我希望能够返回不同类型的弱指针,所以我执行以下操作。templatestd::weak_ptrGetCar(){for(std::vector>::iteratorit=cars.begin();it!=cars.end();++it){T*derived=dynamic_cast((*it).get());if(derived!=nullptr){std::weak_ptrcarPointer=*it;returncarPointer;}}returnstd::weak_ptr();}但

c++ - 将 std::unique_ptr 传递给构造函数以获取所有权

我想将std::unique_ptr传递给一个类的构造函数,该类将获得std::unique_ptr所拥有的数据的所有权。下面的方法foo和bar在编译器处理它们的方式方面是否有任何差异,从而使其中之一更可取?foo类:templateclassfoo{std::unique_ptrdata_;public:foo(std::unique_ptr&&data):data_{std::forward>(data)}{}};bar类:templateclassbar{std::unique_ptrdata_;public:bar(std::unique_ptrdata):data_{std

c++ - 混合 boost::optional 和 std::unique_ptr

我承认:我爱上了可选的概念。自从我发现它以来,我的代码质量有了很大的提高。明确变量是否有效比简单的错误代码和带内信号要好得多。它还让我不必担心必须阅读文档中的契约(Contract),或者担心它是否是最新的:代码本身就是契约(Contract)。就是说,有时我需要处理std::unique_ptr。这种类型的对象可能为空,也可能不是;在代码中的给定点不可能知道std::unique_ptr是否应该有值;不可能从代码中知道契约。我想以某种方式混合optional(可能与boost::optional)和std::unique_ptr,这样我就有一个动态分配的对象,具有范围破坏和适当的复制