草庐IT

shared-object

全部标签

c++ - 如何解决出现在 Objective-C++ 而不是 Objective-C 中的链接错误?

我正在将我的AppDelegate文件从.m转换为.mm(Objective-C到Objective-C++),以便我可以访问用Objective-C++编写的第三方库。在Objective-C中,我的应用程序委托(delegate)构建并运行良好。但是当我更改扩展名时,项目构建并且出现链接错误,所有这些都缺少我使用的用C编写的静态库中的符号。这些错误是具有以下格式的经典链接错误:“MyFunction(arguments)”,引用自:-MyAppDelegate.o中的[MyAppDelegatemyMethod]找不到符号所有的问题都在应用委托(delegate)对象中。我知道我已

原始指针和 shared_ptr 之间的 C++ 接口(interface)

我的代码自始至终都使用原始指针。它需要调用一个方法,将原始指针放入shared_ptr。这个方法不受我控制,属于外部api。我不能只将指针传递给shared_ptr因为它什么时候会被删除当shared_ptr超出方法的范围时(当方法返回时)。除了在内部代码中将原始指针设为shared_ptr之外,我还有其他选择吗? 最佳答案 这听起来有些不寻常并且可能非常危险,但是您可以通过在构造shared_ptr时使用无操作删除器来完成此操作:structno_op_delete{voidoperator()(void*){}};int*p=0

c++ - 如何在 Objective-C 中包装 C++ 库?

我有一个包含数据结构实现的C++库(仅限.h),我想在我的iPhone应用程序中使用它。首先,我在objective-C++中编写了一个包装器作为一个类,通过组合,它具有C++类的ivar。然后我“不得不”将包装器类扩展名更改为.mm,这看起来不错。但是后来我必须将这个包装的类文件包含到其他几个文件中,所以我也必须更改它们的扩展名(以防止一波编译时错误)。我说的对吗?有没有办法将.mm扩展名“限制”为几个文件?(从而防止名称冲突等)编辑:更多可能有用的信息,我使用LLVM1.5作为编译器(我注意到编译时错误的数量从GCC4.2到LLVM1.5不等,但我不确定这是否意味着什么,因为我没有

c++ - 在 shared_ptr 的容器上使用 C++ std::equal

我有一个std::shared_ptr的容器。我想使用std::equal比较两个容器。类A定义了operator==。我想使用其运算符==比较每个元素是否等效,而不是shared_ptr中定义的那个。我是否需要让一个函数或函数对象传递给equal?或者是否有一些内置的东西会更简单(比如中定义的东西)? 最佳答案 您将需要一个函数或一个函数对象或一个lambda表达式(因为您可以使用std::shared_ptr,所以您已经启用了C++0x的某些部分)。中没有任何内容帮助你,但有一些东西在提升:indirectiterator#in

c++ - const boost::shared_ptr<T>& 作为函数参数的目的?

我正在使用某个大型且维护良好的开源C++库,并遇到了一个具有以下形式的构造函数的类定义classSomeClass{SomeClass(constboost::shared_ptr&);}我的问题是:传递constboost::shared_ptr有什么意义?引用?传递boost::shared_ptr是否真的存在不可忽略的开销?按值(value)计算,或者传递boost::shared_ptr是否存在其他危险?按我不知道的值(value)? 最佳答案 按值传递将复制它,这会导致引用计数增加,并在所有线程之间同步。绝对不可忽略。

c++ - 当基类和派生类都继承自 boost::enable_shared_from_this 时出现错误的弱指针

我有一个派生自boost::enable_shared_from_this的基类,然后是另一个派生自基类和boost::enable_shared_from_this的类:#include#includeusingnamespaceboost;classA:publicenable_shared_from_this{};classB:publicA,publicenable_shared_from_this{public:usingenable_shared_from_this::shared_from_this;};intmain(){shared_ptrb=shared_ptr(n

c++ - Qt raw 与 std::shared_ptr

我注意到当在QT中用shared_ptr替换原始指针时,我的代码不再起作用。例如,如果不是QTreeWidgetItem*vItem(newQTreeWidgetItem(ItemTitle));我用std::shared_ptrvItem(newQTreeWidgetItem(ItemTitle));然后,要么程序崩溃,要么什么都没做(即使我使用.get()函数来获取来self代码后面共享的原始指针)。有谁知道可能是什么原因? 最佳答案 对Qt模型项使用共享指针会导致所有权冲突:QTreeWidget获取您传递给它的任何QTree

c++ - 通过引用传递与通过 shared_ptr 传递

Stackoverflow上的大多数问题都是关于shared_ptr应该按ref还是按值传递。但是我的问题是这样的例子:classFoo;voidfunction1(Foo&ff){ff.m_abc=1024;}voidfunction2(conststd::shared_ptr&ff){ff->m_abc=1024;}function1和function2可能会使用和更改ff的某些部分。我的案例:我需要调用带有参数*this或shared_from_this()的函数。print(msg,*this);orprint(msg,this->shared_from_this());我可以

c++ - std::make_shared 三元返回不编译

我正在使用VisualStudio2010并拥有用于创建抽象基类的两个实现之一的工厂。工厂Create方法采用bool标志并返回shared_ptr中的两个impls之一。使用if语句对我来说效果很好,但是当我尝试使用带有make_shared调用的三元时编译器会报错。classBase{public:Base(){};};classFoo:publicBase{public:Foo(){};};classBar:publicBase{public:Bar(){};};classFactory{public:staticstd::shared_ptrCreate(boolisFoo){

c++ - 一个简单的 std::shared_ptr 构造案例的段错误

来自cppreference我了解到std::shared_ptr有一个构造函数:templateexplicitshared_ptr(Y*ptr);然后我试了一段代码如下:#include#include#includeintmain(void){///block1{std::shared_ptrs1(newstd::string("good"));std::shared_ptrs2(s1.get());///s2std::cerri1(newint(1));std::shared_ptri2(i1.get());///i2std::cerr它会导致block1的段错误,但不会导致b