jjzjj

shared_ptr

全部标签

c++ - 比较两组 std::weak_ptr

我正在尝试使用GCC4.7.2比较两组C++11weak_ptr。下面的代码显示了重现错误的最小可能样本:std::set,std::owner_less>>set1;std::set,std::owner_less>>set2;boolresult=(set1==set2);尝试编译以上内容会导致一长串错误,其中第一个实际错误如下:/usr/include/c++/4.7/bits/stl_algobase.h:791:6:error:nomatchfor‘operator==’in‘__first1.std::_Rb_tree_const_iterator::operator*>(

c++ - boost ptr_map 替换值

给定一个键,我试图替换一个值。对于不使用指针的常规映射,我只是使用了以下调用iter->second=object;//Whereobjectwaspassedinbyreference如何使用boost::ptr_map实现同样的效果?这里的概念是我们用derived_object替换整个类iter->second=derived_object;//derived_objectisabase_objectpointer 最佳答案 这样就可以了:the_map.replace(iter,derived_object);当然在哪里,t

c++ - 未使用依赖类型的“预期主表达式”错误

在下面的代码中,main()中的'bObj->b()'行可以编译,但是'cObj->c()'行会给出一个错误'expectedprimary-expressionbefore'>'token'。这与依赖类型无关;在适当的地方添加"template"或"typename"没有帮助。关于问题是什么的任何提示?在此代码的“真实”版本中,函数“b”还有许多其他模板和非模板版本。问题可能只发生在一个地方,而不是其他地方,但我无法确定重要的区别是什么。#includeclassA{};classD:publicA{};classB{public:templateboost::shared_ptrb

c++ - unique_ptr 成员,私有(private)复制构造函数与移动构造函数

给定多个派生类的基类,目标是创建一个包装类,允许STL容器查看具有基接口(interface)的对象,尽管实际上可能会将不同的派生类添加到容器中。(参见Retrievedatafromheterogeneousstd::list)。经过一些修补,我提出了一个新的派生类,它是对基类的unique_ptr的包装。但是,移动构造函数让我感到困惑。classBase{friendclassBaseWrapper;virtualBase*clone()const=0;public:virtual~Base(){}//...publicinterface};classDerived:publicB

c++ - unique_ptr 用法 - 类图

谁能帮我用下面的代码来显示类对象的内容?Q1-任何人都可以确认-这是否是在map中存储指向表类对象的指针的正确方法?Q2-如何输出map中整条记录的内容?谢谢#include#include#include#includeclassTable{public:intc1,c2,c3;Table(){}Table(int_c1,int_c2,int_c3){c1=_c1;c2=_c2;c3=_c3;}};intmain(){std::map>mapTable;std::unique_ptrup(newTable(1,2,3));//Isthiscorrectwaytostorethepoi

c++ - 在什么平台上 func(shared_ptr(...), shared_ptr(...)) 真的很危险?

我记得ScottMeyers教我的func(shared_ptr(newP),shared_ptr(newQ));是危险的,因为(如果我没记错的话)内存分配、引用计数(构造)和分配给顺序>函数参数允许leak(理论上?)在极少数情况下出现。为了防止这种情况应该将shared_ptr封装在函数调用中,例如在make_shared()中。func(make_shared(),make_shared());这是一些discussion关于它。我想知道是否有(当前)编译器在该领域,在某些系统上确实可能在某些错误情况下留下一些漏洞?还是那些时代已经过去了,或者它们只是理论上的?最有趣的是知道其中

c++ - boost::shared_ptr 到 void * 反之亦然

我正在用C语言开发一个应用程序,我需要在其中使用第3方C++库。所以,我基本上是在C++库周围编写一个包装器,以便可以从我的纯C应用程序中调用它。库中的一些方法返回类型为boost::shared_ptr的指针,我需要将其转换为void*[forC]然后将其转换回boost::shared_ptr类型以重用它以进行进一步处理。我使用以下方式进行转换:作废*:void*func1(){//aftertheboost::shared_ptriscreatedreturnstatic_cast(SHARED_PTR.get())}来自void*:voidfunc2(void*VOID_PTR

c++ - 如何在不创建新 int 的情况下设计 RAII 文件描述符

我想围绕文件描述符创建一个RAII包装器。由于该对象可能会在线程中传递,因此它确实是一种共享资源:这就是为什么我使用带有自定义析构函数的shared_ptr进行了第一个实现。structfile_descriptor{file_descriptor(conststd::string&pathname,intflags):m_fd(initialize(pathname,flags)){}file_descriptor(constintopened_fd):m_fd(initialize(opened_fd)){}operatorint()const{return*m_fd;}priva

c++ - boost::shared_ptr,ctor 中的一个原子递增,但 dtor 中的两个原子递减?

我正在单步执行boost::shared_ptr的源代码,并且在构造时引用计数器调用一次原子增量。但是,在销毁时我看到原子递减被调用了两次,连接到弱引用?但是,这怎么行呢?在构建时递增一次,在销毁时递减两次,一次在release()中,一次在weak_release()中? 最佳答案 shared_ptr必须维护两个引用计数。一个用于共享实例,一个用于可能通过weak_ptr引用。有了这个,weak_ptr能够增加shared_ptr中的弱引用计数并保持shared_ptr事件(即使在分配的对象被释放之后)以确定从weak_ptr到

c++ - 在没有 C++11 的情况下使用 unique_ptr

这个问题在这里已经有了答案:unique_ptrboostequivalent?(5个答案)关闭7年前。我想将指向d的指针从一个容器传递到下一个容器。在任何时候都不会有超过一个指针的所有者(或d本身)。我希望当最后一个指针超出范围时,自动调用deleted。在C++11中,我将使用unique_ptr来完成此操作。但是,唉,我不能使用C++11。C++中最好的等价物是什么?升压就好了或者,如果没有,处理此问题的适当方法是什么?