草庐IT

指针认证

全部标签

c++ - Boost.Serialization 是否释放加载指针期间创建的内存?

具体来说,我指的是Boost.Serialization教程中的演示here.在上面的demo中,bus_top实例作为指针存储在bus_route中,展示了指针的序列化是如何实现的。然而,我观察到一个有趣的行为,即析构函数bus_stop::~bus_stop()永远不会为restore_schedule()bus_stop对象调用。我在bus_stop::~bus_stop()中放置了一个断点,它仅由main函数末尾的delete语句触发。在加载序列化数据期间,初始化指针的对象在boost/archive/detail/iserializer.hpp中定义的pointer_iser

c++ - 具有可选所有权的智能指针

我试图让一个类包含一个指针,它可以是一个拥有的指针或一个借用的指针。在前一种情况下,它应该销毁拥有的对象本身;在后一种情况下,它不应破坏指向的对象。在代码中,我有类A、B和C。我的目标是以下(简化的)定义,其中B是需要拥有指针的类:classC{...};classB{C*c;B(C*c):c(c){}};classA{Cc1;Bb1,b2;//b2leakspointertoCA():b1(&c1),b2(newC()){}};当A的实例销毁时,它会销毁c1、b1和b2。理想情况下,b2的销毁应该删除匿名C实例,但b1的销毁不应删除任何东西(因为c1会被A直接销毁)。我可以使用什么样

c++ - 将 nullptr 传递给可变模板指针

我目前有以下功能:templatevoidGet(T*out,Args*...other);templatevoidGet(T*out);templatevoidGet(int*out);templatevoidGet(int64*out);templatevoidGet(double*out);templatevoidGet(char**out);templatevoidGet(void**out);调用使用:Get(&i,&t,&f);i为int,t为char*和f作为double。如果我想传递一个空指针,这非常有用,但有一个异常(exception)。Get(&i,nullptr

c++ - 动态 boost 线程运行存储在具有共享指针的 vector 中的对象的方法

我有一个摄像头类,它是网络摄像头的抽象。该类有一个方法rxImageThread(),它本质上是一个图像服务器。我想在n个线程中为n个摄像机运行n个服务器,其中n是动态设置的(来自配置文件)。相机对象存储在一个vector中:std::vector>cameras;我在循环中创建相机对象:cameras.push_back(boost::shared_ptr(newcamera(ip,controlPort,dataPort,imagePort,name)));我有一个vector来存储线程:std::vector>threads;在一个循环中,我想让每个摄像头的rxImageThre

c++ - 返回 vector 元素的拷贝与返回指向 vector 元素的指针

我有一个这样的对象:classNode{floatx,y,z;size_ttag;boolisFree;std::vectorconnections;//Usually~10-100inlength};只是为了让您了解尺寸。这些节点对象的列表包含数百万个实例,我将其称为std::vectormasterNodes.我在其他地方有一个函数返回这些对象的容器,比如这个:std::vectorfind_nodes(){std::vectornodes;//copysomeelementsfrommasterNodesthatmeetourconditionsreturnnodes;}我的问题

c++ - 指向函数的模板指针的部分模板特化

考虑以下抽象订阅类:templateclassSubscription{public:virtual~Subscription(){}virtualboolhandle(constTMessage&)=0;};在某些情况下,如果单独一个类可以多次实现这个抽象类会很方便-即使对于同一个TMessage-和不强制继承。为了实现这一点,我使用模板指针以下列方式运行:templateclassInvoker:publicSubscription{public:Invoker(TCaller*caller):m_caller(*caller){}virtualboolhandle(constTM

c++ - LLVM IR 中的一切都是指针吗?

我遍历程序的全局变量并对它们的类​​型感兴趣。对于测试,例如:#includeinti=0;intmain(){printf("lala%d\n",i);return0;}我得到的输出是:Globals:iType:14//14==>POINTERTYPEID!StackLock:Stack1FunctionArgument:i32*@i我的代码:for(Module::global_iteratorI=M.global_begin(),E=M.global_end();I!=E;++I){std::coutgetName().str()getType()->getTypeID()ge

c++ - 为什么下面的runner指针没有变为null?

为什么runner指针没有改成null?Node*runner=head->next;Node*reversedList=head;reversedList->next=nullptr;但在下面,它确实变为nullNode*reversedList=head;reversedList->next=nullptr;Node*runner=head->next; 最佳答案 在你发出下面的声明之后Node*runner=head->next;'runner'指向由'next'指向的地址内存(假设它是地址0x6543)。(head->nex

c++ - GCC 无法优化涉及成员函数指针的委托(delegate) lambda 函数

我使用GCC4.9.2和clang3.6.0编译了以下c++14代码。我使用了-O3标志。#includestructS{inta;intA()const{returna;}};templateintFunc(F&&f,Args&&...args){returnf(std::forward(args)...);}usingPtrA=int(S::*)()const;intF(Sconst&s,PtrAptr){return(s.*ptr)()*5;}intp(Sconst&s){returns.A()*5;}intP1(Sconst&s){returnFunc(&F,s,&S::A);

c++ - const 指针和 const 数组的输出

当我们有两个运算符用于输出对象和这些对象的数组,并尝试输出常量对象数组时,就会涉及到对象运算符。有没有办法强制数组的运算符与常量对象的c数组一起使用?示例代码:#include#includeusingstd::size_t;namespacenm{structC{inti;};templateusingc_c_array=C[N];inlinestd::ostream&operatorinlinestd::ostream&operatorconst&){returnlhs输出:1211此外,在我的例子中,2运算符使用1作为输出。 最佳答案