草庐IT

shared-ptr

全部标签

c++ - 在没有 RValue 隐式转换的情况下正确实现

我遇到了RValue不允许隐式转换的问题。我的问题是什么实现更好地“绕过”这个限制?下面是说明问题的示例代码:templateclassITestClass{public:virtualvoidmyFunc(myValitem)=0;virtualmyValmyFunc1()=0;};classCTestClass:publicITestClass{public:voidmyFunc(intitem){}intmyFunc1(){return0;}};templateinlineintCallFunction(std::shared_ptr>ptrBase){return0;}inli

c++ - 带有标准容器的 std::shared_ptr

我有一个容器shared_ptrs和我将这些对象交给WindowsAPI,稍后我使用原始ptr获得回调。我要找对shared_ptr事后。这可以用shared_ptr干净地完成吗?(不使用shared_from_this())。非常基本的例子:classCFoo{};typedefstd::shared_ptrCFooPtr;typedefstd::setCFooSet;externCFooSetm_gSet;voidSomeWindowsCallBack(CFoo*pRawPtr){m_gSet.erase(pRawPtr);}我知道这可以用intrusive_ptr来完成很容易,但

c++ - 由于抽象模板 arg 的实例化,boost::lambda 表达式无法编译。任何解释和/或解决方法?

我正在学习boost::lambda,并且我已经设法创造了一个我目前所知道的无法解决的情况。显然在boost::lambda的内部,以下示例导致尝试实例化抽象类AbstractFoo,并阻止lambda表达式编译。问题是我不知道它为什么要实例化它,所以我无法尝试解决它。​​任何boost::lambda专家都可以:请告诉我为什么会这样?建议解决方法?例子:#include#include#include#includestructAbstractFoo{typedefboost::shared_ptrPtr;virtualintit()const=0;};structBar:publi

c++ - Boost::HPC 侵入式

用于高性能计算的boost::intrusive库有多好?我想为不可复制的不可分配类使用一个容器。我打算用带有shared_ptr的普通STL。我发现boost::intrusive也可以用于相同的目的。所以我的问题是,它们真的那么有效吗?如果在具有shared_ptr类型的STL容器和boost::intrusive类型之间进行选择,您更喜欢哪一个? 最佳答案 一般来说,侵入式收集在内存使用方面是最有效的。如果您的目标是挤压每一个最后的CPU周期,那是唯一的方法。考虑一个boost共享指针列表。创建新对象时会发生以下情况:从堆中分

c++ - 如何重新分配 boost shared_ptr

我有两个Boostshared_ptrshared_ptrA(newX);shared_ptrB(newX);第三个指针最初指向与A相同的X。shared_ptrC=A;更改C使其指向与B相同的X的正确方法是什么?C=B; 最佳答案 EdChm是对的。我做了一个小测试程序来明确它。它使用C++11,但可以轻松转置。#include#includeintmain(){std::shared_ptrA(newint(1));//createsasharedpointerpointingtoanint.Soheunderlyinginti

CMake Error at /usr/share/cmake-3.10/Modules/CMakeFindDependencyMacro.cmake:48 (find_package):

问题:CMakeErrorat/usr/share/cmake-3.10/Modules/CMakeFindDependencyMacro.cmake:48(find_package): Foundpackageconfigurationfile:  /home/wl/anaconda3/lib/cmake/Qt5WebKit/Qt5WebKitConfig.cmake butitsetQt5WebKit_FOUNDtoFALSEsopackage"Qt5WebKit"isconsideredto beNOTFOUND. Reasongivenbypackage: Qt5WebKitcould

java - 将 std::unique_ptr 传递给 JNI

我正在用JNI包装一些C++代码,偶然发现了以下工厂函数:std::unique_ptrcreate_metric_planner(*arguments*)我需要将此函数创建的规划器的引用传递回Java以供以后使用,但我很困惑a)如何将其传回,以及b)一旦它被传递下去会发生什么。通常情况下,我都是这样过去的:Director*DIRECTOR=newDirector(arguments);return(jlong)DIRECTOR;它的效果非常好。有人可以解释当使用返回此类指针的工厂函数而不是普通构造函数时使用JNI引用对象的类似过程吗? 最佳答案

boost::smart_ptr 的 C++ 非侵入式 boost 序列化

我正在尝试序列化我无法使用boost::serialization修改的自定义类,并且我需要将逻辑/计算代码与序列化部分分开。它有一些我必须序列化的protected和私有(private)字段,其中一些是其他类的boost::shared_ptr。类似于://computationalclassesclassA{public:A(inta):m_val(a){}private:intm_val};classB{public:B(a):m_ptr(newA(a)){}private:boost::shared_ptrm_ptr;};我发现了一个简单的解决方法来序列化A类,只在其定义中添

c++ - 模板别名 shared_ptr 和 unique_ptr 时是否有任何陷阱或限制?

为了减少输入类似内容的简单原因:std::shared_ptr;std::unique_ptr;每次想使用智能指针的时候,我就想到了使用模板别名:templateusingsptr=std::shared_ptr;templateusinguptr=std::unique_ptr;所以我可以像这样使用它们:sptr;uptr;假设我在自己的命名空间中保护它们,以这种方式使用带有shared/unique_ptr的模板别名是否有任何陷阱或限制?我会不会做一些我可以用直接模板语法做而我不能用别名做的事情?由于其他原因,这是一个坏主意吗? 最佳答案

c++ - 在 C++ 中初始化静态 std::map<int, unique_ptr<int>>

这是一个与此post类似的问题.我认为最有前途的答案与模板化静态初始化有关。这是该答案的类(class):templateclasscreate_map{private:std::mapm_map;public:create_map(constT&key,constU&val){m_map[key]=val;}create_map&operator()(constT&key,constU&val){m_map[key]=val;return*this;}operatorstd::map(){returnm_map;}};用法:std::mapmymap=create_map(1,2)(