草庐IT

non_lazy_ptr

全部标签

c++ - 是否保证 std::unique_ptr 删除顺序?

我正在制作一个控制我的应用程序的全局单例,我希望子系统以特定顺序启动和关闭。classApp{public:App();~App();voidstart();voidrun();voidshutdown();private:std::unique_ptrdisplayManager;std::unique_ptrrenderer;};构造函数以正确的顺序创建指针App::App(){displayManager=std::unique_ptr(newDisplayManager);renderer=std::unique_ptr(newRenderer);}并且我希望以相反的顺序释放u

c++ - 手动递增和递减 boost::shared_ptr?

有没有办法在C++中手动增加和减少shared_ptr的计数?我要解决的问题如下。我正在用C++编写一个库,但接口(interface)必须是纯C语言。在内部,我想使用shared_ptr来简化内存管理,同时保留通过C接口(interface)传递原始指针的能力。当我通过接口(interface)传递原始指针时,我想增加引用计数。然后客户端将负责调用一个函数,该函数将在不再需要传递的对象时减少引用计数。 最佳答案 也许您正在跨DLL边界使用boost::shared_ptr,这将无法正常工作。在这种情况下boost::intrusi

C++ weak_ptr创建性能

我已经读到创建或复制std::shared_ptr会涉及一些开销(引用计数器的原子增量等)。但是如何从中创建std::weak_ptr呢?Obj*obj=newObj();//fastObj*o=obj;//slowstd::shared_ptra(o);//slowstd::shared_ptrb(a);//slow?std::weak_ptrc(b);我希望能够获得更快的性能,但是我知道共享指针仍然必须增加弱引用计数器。那么,这仍然像将shared_ptr复制到另一个一样慢吗? 最佳答案 除了Alec's非常有趣的描述他以前的项

c++ - std::move 与 std::auto_ptr 相比?

我可以用C++11中的“移动”(右值引用)做什么我不能用std::auto_ptr做什么?(据我了解,它们是一个想法的不同实现。)老问题又来了:std::auto_ptr是这么糟糕的组件吗? 最佳答案 C++98/03没有真正“可移动”类的概念。auto_ptr是一个具有transfer-on-copy-semantics的类,即当您制作拷贝时,原始内容会发生变化(注意带有非常量参数的复制构造函数!)。这是不好的。这样的类不能在标准容器中使用。由于新添加的右值引用概念,C++11引入了真正可移动类的概念。新的unique_ptr完全

c++ - 我如何使用 _com_ptr_t?

假设我有一个拥有D3DDevice的类:classThing{public:Thing(){D3D11CreateDevice(...,&device,...);}~Thing(){device->Release();}private:ID3D11Device*device;};据我所知,我可以使用_com_ptr_t来确保删除对象,而不必在析构函数中显式调用Release()。但问题是我无法找出模板的正确语法。我几乎找不到关于_com_ptr_t的任何信息,我能找到的最接近答案的是this(Japanese)one.按照那里的语法,我得到了一堆编译器错误:private://ID3D

c++ - 错误 : Variable length array of Non-POD element type 'string'

在开始之前,我必须首先声明,我已经研究过针对此错误的可能解决方案。不幸的是,它们都与不使用数组有关,这是我项目的要求。另外,我目前正在学习CS入门类(class),所以我的经验几乎没有。数组的用途是从文件中收集名称。因此,为了初始化数组,我计算了名称的数量并将其用作大小。问题是标题中所述的错误,但我仍然使用一维数组时看不到解决方法。主要.cpp#include#include#include#include#include#include"HomeworkGradeAnalysis.h"usingnamespacestd;intmain(){ifstreaminfile;ofstrea

【ARMv8M Cortex-M33 系列 1.1 -- SAU Non-secure Callable(NSC) 介绍 】

请阅读【嵌入式开发学习必备专栏之Cortex-M33专栏】文章目录SAUNSC介绍安全状态(Securestate)非安全状态(Non-securestate)非安全可调用(Non-secureCallable,NSC)区域NSC介绍配置NSCSAUNSC介绍ARMv8-M架构引入了TrustZone技术,它提供了一种机制来实现在单个处理器内部的安全隔离。这项技术定义了两种状态:安全状态(Securestate)和非安全状态(Non-securestate)。在此架构下,可以同时运行安全和非安全代码,并且通过硬件保护确保两者之间的隔离。为了允许非安全代码安全地调用安全函数而不会破坏系统的安全性

c++ - unique_ptr 的取消引用运算符在 Eclipse 中不起作用

按照thispost中的步骤操作后我设法让Eclipse(Indigo)识别unique_ptr(和其他C++11新东西)。问题是operator->forunique_ptr似乎在Eclipse中不受支持。这里有一个例子:classFoo{voidbar(){/*...*/}};std::unique_ptrfoo;(*foo).bar();//1foo->bar();//2Case1按预期工作:没有错误并且自动完成工作。然而,对于案例2,Eclipse将语句标记为错误(“无法解析方法'bar'”),而且foo->的自动完成功能不起作用。最有趣的是,我对std::shared_ptr

c++ - 为什么 std::shared_ptr 从基类和派生类调用析构函数,而 delete 只调用基类的析构函数?

这个问题在这里已经有了答案:Howisitpossible(ifitis)toimplementshared_ptrwithoutrequiringpolymorphicclassestohavevirtualdestructor?(3个答案)关闭8年前。为什么在使用std::shared_ptr释放时从基类和派生类调用析构函数,而第二个示例仅从基类调用析构函数?classBase{public:~Base(){std::coutsharedA(newDerived);}std::cout输出:--------------------DeriveddestructorBasedestr

c# - C++ 数组 vs C# ptr 速度混淆

我正在用C#重写一个高性能C++应用程序。C#应用程序明显比C++原始版本慢。分析告诉我,C#应用程序将大部分时间花在访问数组元素上。因此我创建了一个简单的数组访问基准。我得到的结果与othersdoingasimiliarcomparison完全不同.C++代码:#include#include#include#includeusingnamespacestd;usingnamespacestd::chrono;intmain(void){high_resolution_clock::time_pointt1=high_resolution_clock::now();intxRepL