草庐IT

$双指针

全部标签

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

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

c++ - C++中的自动指针

我很想知道auto_ptr是如何在C++中实现的。我试图找出它的源代码在ubuntu10.04中的位置。我只能找到.h文件,但找不到它的实现。我在哪里可以找到它? 最佳答案 .h文件几乎可以肯定是它的实现。auto_ptr是一个模板。由于需要完整包含模板实现,因此它们通常位于.h文件中。 关于c++-C++中的自动指针,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4738824

c++ - 使用未初始化的指针作为函数参数

因为我想将一个未初始化的指针传递给一个函数,它会出现运行时错误。但是如果我将这个指针作为引用传递,它就可以正常工作。我无法解释为什么...classBody{};voidcheck(Body*b){b=newBody();}voidcheckRef(Body*&b){b=newBody();}intmain001(){Body*b;//check(b);//error:Thevariable'b'isbeingusedwithoutbeinginitialized.(inVS2010)checkRef(b);//OKreturn0;}b传给check和checkRef有什么区别?我在V

C++ 指针赋值语句似乎不起作用/做任何事情

我在模板类(一个简单的FIFO队列)中有以下方法,在GDB调试时,我发现将指针“previous”重新分配给“current”的语句似乎什么也没做。执行此语句时,previous开始为NULL,current不为NULL,但previous仍为NULL。有没有人见过这样的事情?inlineintsearch(QueueEntry*current,QueueEntry*previous,unsignedlonglongt){while(current&&!(current->getItem()->equals(t))){previous=current;//**thislinedoesn

C++判断一个变量是引用还是指针

我在代码的catch部分有一个宏,比方说#defineCATCH(doSomething)\catch(MyException&e)\{\try\{\doSomething;\}\}\catch(MyException*e)\{\try\{\doSomething;\}\}在doSomething部分我需要获取异常的内容,有没有办法做到这一点?一些函数isPointer可以像这样使用:try{THROW(newMyException());}CATCH(\if(isPointer(e))\{\std::cout 最佳答案 只需使用重

c++ sizeof operator - 指向double的指针

我在使用sizeof运算符(C++)时得到了意想不到的结果。在主课中,我有这些行double*arguments_=newdouble();*arguments_=2.1;*(arguments_+1)=3.45;cout这给我输出480Doublesize是8个字节,而且(sizeofarguments_[0])=8。但是,为什么(sizeofarguments_)也不是用字节表示的(2*8=16)?sizeof运算符是否适用 最佳答案 两个值都以相同的单位表示。你有一个32位系统,所以地址的大小是32位,或4个字节。在你的系统上

c++ - 如何处理带有指针的 map ?

假设我有一个名为People的类。我在map中存储指向这些人的指针mapmyMap;要创建新人,我使用maps[]运算符。myMap["dave"]->sayHello();但这给了我一个段错误,它甚至没有调用People类的构造函数。我也试过myMap.insert(std::make_pair("dave",newPeople()));但这并没有改变任何东西,构造函数仍然没有被调用,并且程序因段错误而关闭处理这段代码。如何访问和操作其中包含指针的map?为什么上面的方法不起作用,我没有收到编译时错误或警告。非常感谢任何见解,谢谢 最佳答案

c++ - 重构代码以使用 Boost 共享指针

我使用普通指针编写了一个项目,现在我受够了手动内存管理。在重构过程中可以预见到哪些问题?到目前为止,我已经花了一个小时来替换X*与shared_ptr对于我想自动管理内存的类型。然后我改了dynamic_cast至dynamic_pointer_cast.我仍然看到更多错误(与NULL相比,将this传递给函数)。我知道这个问题有点模糊和主观,但我认为我可以从已经这样做过的人的经验中受益。有没有陷阱? 最佳答案 虽然到处使用boost::shared_pointer很容易,但您应该根据所有权语义使用正确的智能指针。在大多数情况下,您

c++ - 指针和性能影响?

使用指针对性能有影响吗?避免使用指针是否更好?如果是,在什么情况下?显然,它们与引用文献一起有助于减少数据复制。我假设如果指向的数据类型很小,那么对指针的需求也较小。相反,通过指针传递大对象更好,因为指针的开销比复制对象的开销小。我还想知道参数/参数以外区域的指针?在此性能上下文中,引用通常比指针更好吗?我意识到我正在接近微优化的SO“肮脏”主题,但我正在编写一个非常注重延迟的应用程序。 最佳答案 我知道性能很重要,但语义更重要:快速和错误是没有用的。使用指针或引用具有语义含义,例如共享:voidfoo(A&a){a.a=1;if(

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