草庐IT

Shared-Preferences

全部标签

c++ - 如何将 shared_ptr 作为参数传递给可变对象?

我想通过对函数的智能指针引用传递一个对象。该函数可能会更改引用对象的值,但可能不会更改引用本身。有两种明显的方法可以解决这个问题。按值传递shared_ptr的第一种方法-它是引用,因此它本身不需要按引用传递。这样做的明显问题是引用的复制,这表明存在一些引用计数开销。voidfoo(shared_ptrp)第二种方法是通过const引用传递shared_ptr-避免复制shared_ptr实例,而是暗示对引用对象的访问需要两层解引用而不是一层。voidfoo(constshared_ptr&p)在实践中,这些理论开销通常微不足道且无关紧要。这对我来说表明,我应该几乎总是遵循一些标准惯例

c++ - weak_ptr 是基类的,而 shared_ptr 是派生类的?

我有一个结构来管理从基类派生的对象Entity,但不控制它们的生命周期。我希望这个结构被赋予像weak_ptr这样的弱指针这样它就可以知道该对象是否已在其他地方被销毁。但是,在共享指针所在的管理结构之外,我希望共享指针更具体shared_ptr(SpecificEntity使用Entity作为基类)。有没有什么办法可以做到这一点,或者类似的东西? 最佳答案 很有可能。您可以随时转换shared_ptr到shared_ptr隐含地,对于另一个方向你有std::static_pointer_cast和std::dynamic_point

c++ - shared_ptr 是线程安全的开销是多少?

std::shared_ptr保证是线程安全的。我不知道典型的实现使用什么机制来确保这一点,但它肯定有一些开销。即使您的应用程序是单线程的,这种开销也会存在。是上述情况吗?如果是这样,如果您没有使用线程安全保证,这是否意味着它违反了“您不为未使用的东西付费”的原则? 最佳答案 如果我们检查cppreferencestd::shared_ptr的页面他们在实现说明部分陈述了以下内容:Tosatisfythreadsafetyrequirements,thereferencecountersaretypicallyincremented

C++11 传递 'this' 作为 std::make_shared 的参数

我正在尝试使用std::make_shared将“this”传递给构造函数例子://headersclassA{public:std::shared_ptrcreateB();}classB{private:std::shared_ptra;public:B(std::shared_ptr);}//sourcestd::shared_ptrA::createB(){autob=std::make_shared(this);//Compilererror(VS11Beta)autob=std::make_shared(std::shared_ptr(this));//Nocompiler

c++ - boost::shared_ptr 在多线程中使用它安全吗?

一段时间以来我一直试图找到答案,但我失败了。假设我们有一个从一个线程创建的shared_ptr。然后我们将这个shared_ptr传递给另外两个线程(例如使用一些队列)。所以从这一刻起,原始shared_ptr有2个拷贝,指向同一个原始指针。两个所有者线程将从队列中获取此shared_ptr的拷贝。然后他们会将其传递给另一个线程或将其销毁。问题是-它安全吗?原始指针是否会被正确销毁(不会竞争引用计数器?) 最佳答案 C++标准几乎没有关于线程安全的保证。std::shared_ptr的引用计数是唯一的异常(exception):它保

c++ - std::shared_ptr 不适用于范围

我正在尝试在for循环范围内迭代一个临时对象。看起来对象在循环开始执行之前就被取消了。这是标准的合规行为吗?我正在使用gcc4.8。#include#include#includestructTest:std::vector{Test():std::vector{1,2,3}{std::coutfunc(){returnstd::shared_ptr(newTest);}intmain(){for(constauto&obj:*func()){std::cout结果如下:Test::Test()Test::~Test()217703000330003 最佳答

c++ - 使用 std::make_shared 抽象类实例化时出错

我将省略相当多的代码,因为这些是一些相当大的对象,而我的问题实际上只涉及std::make_shared的操作。我在名为D3D11Shader的命名空间SYNC中有一个对象。这有一个名为static的函数,SYNC::D3D11Shader*SYNC::D3D11Shader::CreateInstance(conststd::string&s)它将采用字符串索引并返回指向从SYNC::D3D11Shader派生的着色器实例的指针。有一次我开始使用智能指针在包含所有这些着色器的vector中自动重新分配它们。然而,当我去做这件事时,std::shared_ptrshaderPtr;//

c++ - 独立的 shared_ptr<T> 实现?

有人知道我可以在我的程序中使用的TR1shared_ptr(可能还有其他智能指针)的开源独立实现吗?备注:“shared_ptr的独立实现”表示shared_ptr自身需要是独立的。强不只是包含库。所以请不要提升! 最佳答案 shared_ptr的boost实现完全是头文件,因此安装boost以使用它就像下载boost并将其添加到编译器的头文件搜索路径一样简单。这对boost来说并不比任何其他独立实现更难。如果你只想提取shared_ptr组件来进行单独的分发,那么你可以使用BoostBCP.

详细解决-error while loading shared libraries: libpcap.so.0.8: cannot open shared object file: No such

文章目录前言总结前言今天在Centos系统运行我的xray,发现报了这个错./xray:errorwhileloadingsharedlibraries:libpcap.so.0.8:cannotopensharedobjectfile:Nosuchfileordirectory也有一些小坑,特地记录一下,方便自己日后查看。提示:以下是本篇文章正文内容,下面方法成功解决首先正常给了执行权限,chmod777或者755都行。然后运行发现报错了。先直接yum安装libpcap-devel:yuminstalllibpcap-devel然后locate命令去查看,定位出/usr/lib64目录下的三

c++ - 为什么复制 const shared_ptr& 不会违反 const-ness?

尽管我的代码编译得很好,但这一直困扰着我,我无法在stackoverflow上找到答案。以下通用构造函数是将shared_ptr传递给构造函数中的类实例的一种方法。MyClass{MyClass(conststd::shared_ptr&pt);std::shared_ptrpt_;//EDITED:Removed&typo};MyClass::MyClass(conststd::shared_ptr&pt):pt_(pt){}这编译得很好。我的问题如下:在我的理解中,像这样声明一个参数const:voidmyfunc(constT&t)promise不改变t。但是,通过将shared