草庐IT

c++ - c++ 中++*ptr++ 是未定义的行为吗?

我在测试中被问到以下关于评估++*ptr++的问题(我不想自己写。测试问了它。我仍然知道它的错误代码)intAr[]={6,3,8,10,4,6,7};int*Ptr=Ar;cout但是,我怀疑这是未定义的行为,因为它可以是(++*ptr)++或++(*ptr++)。是吗?我对文档不太熟悉,所以我找不到任何东西。 最佳答案 HoweverIsuspectthisisundefinedbehavioursinceitcanbeboth(++*ptr)++or++(*ptr++).Isit?并非如此,与运行时行为不同,它为实现者提供了充

c++ - 如何在 Android NDK 和 STLport 中使用 boost 库(包括 shared_ptr)

这更像是一个答案而不是一个问题,因为我已经弄清楚了,至少就干净地编译库而言。我的主要问题是让shared_ptr工作。成分:Boostv.1.45.0http://www.anddev.org/viewtopic.php?p=29939上的STLport版本.NDK版本r4b。路线:在您的Android.mk文件中添加:LOCAL_CFLAGS+=-DBOOST_EXCEPTION_DISABLE-D_STLP_NO_EXCEPTIONS-DOS_ANDROID-D_STLP_USE_SIMPLE_NODE_ALLOC在STLport/STL/_string.h的第613行删除对__S

c++ - weak_ptr 是如何工作的?

我了解如何使用weak_ptr和shared_ptr。通过计算对象中的引用数,我了解shared_ptr的工作原理。weak_ptr是如何工作的?我尝试通读boost源代码,但我对boost不够熟悉,无法理解它使用的所有东西。谢谢。 最佳答案 shared_ptr使用额外的“计数器”对象(又名“共享计数”或“控制block”)来存储引用计数。(顺便说一句:那个“计数器”对象也存储了删除器。)每个shared_ptr和weak_ptr都包含一个指向实际指针对象的指针,以及一个指向“计数器”对象的第二个指针。为了实现weak_ptr,“

c++ - 带有 unique_ptr 的前向声明?

这个问题在这里已经有了答案:Isstd::unique_ptrrequiredtoknowthefulldefinitionofT?(9个回答)关闭7年前。我发现将类的前向声明与std::unique_ptr结合使用很有用如下面的代码所示。它编译并与GCC一起工作,但整个事情看起来有点奇怪,我想知道这是否是标准行为(即标准所要求的)?因为当我声明unique_ptr时B不是一个完整的类型.A.hpp#includeclassB;classA{std::unique_ptrmyptr;//B::~B()can'tbeseenfromherepublic:~A();};A.cpp#incl

c++ - 一个人如何降低 std::shared_ptr?

考虑:structSomethingThatsABase{virtualboolIsChildOne()const{returnfalse;}virtualboolIsChildTwo()const{returnfalse;}};structChildOne:publicSomethingThatsABase{virtualboolIsChildOne()const{returntrue;}};structChildTwo:publicSomethingThatsABase{virtualboolIsChildTwo()const{returntrue;}};voidSomeClien

c++ - 为什么 unique_ptr 将删除器作为类型参数而 shared_ptr 没有?

std::unique_ptr模板有两个参数:指针的类型和删除器的类型。第二个参数有一个默认值,所以你通常只写std::unique_ptr.std::shared_ptr模板只有一个参数:指针的类型。但是您也可以使用自定义删除器,即使删除器类型不在类模板中。通常的实现使用类型删除技术来做到这一点。std::unique_ptr没有使用相同的想法是否有原因?? 最佳答案 部分原因是shared_ptr无论如何都需要一个显式的控制block来控制引用计数,并且在上面插入一个删除器并不是什么大不了的事。unique_ptr但是不需要任何

c++ - 为什么在 shared_ptr 只取一个时 unique_ptr 取两个模板参数?

两者unique_ptr和shared_ptr接受自定义删除器来调用他们拥有的对象。但是在unique_ptr的情况下,删除器是作为class的模板参数传递的,而shared_ptr的自定义删除器的类型是被指定为构造函数的模板参数。template>classunique_ptr{unique_ptr(T*,D&);//simplified...};和templateclassshared_ptr{templateshared_ptr(T*,D);//simplified...};我不明白为什么会有这种差异。有什么要求? 最佳答案

c++ - 创建包含已分配数组的 unique_ptr 的正确方法

创建一个unique_ptr的正确方法是什么,它包含一个在自由存储上分配的数组?VisualStudio2013默认支持这一点,但是当我在Ubuntu上使用gcc4.8.1版时,我会遇到内存泄漏和未定义的行为。这个问题可以用这段代码重现:#include#includeusingnamespacestd;intmain(){unique_ptrtestData(newunsignedchar[16000]());memset(testData.get(),0x12,0);return0;}Valgrind会给出这个输出:==3894==1errorsincontext1of1:==38

c++ - 如何使用 shared_ptr 避免内存泄漏?

考虑下面的代码。usingboost::shared_ptr;structB;structA{~A(){std::coutb;};structB{~B(){std::couta;};intmain(){shared_ptra(newA);shared_ptrb(newB);a->b=b;b->a=a;return0;}没有输出。没有调用析构函数。内存泄漏。我一直认为智能指针有助于避免内存泄漏。如果我需要在类中进行交叉引用,我应该怎么做? 最佳答案 如果你有这样的循环引用,一个对象应该持有weak_ptr到另一个,而不是shared_

c++ - 如何使用 shared_ptr 避免内存泄漏?

考虑下面的代码。usingboost::shared_ptr;structB;structA{~A(){std::coutb;};structB{~B(){std::couta;};intmain(){shared_ptra(newA);shared_ptrb(newB);a->b=b;b->a=a;return0;}没有输出。没有调用析构函数。内存泄漏。我一直认为智能指针有助于避免内存泄漏。如果我需要在类中进行交叉引用,我应该怎么做? 最佳答案 如果你有这样的循环引用,一个对象应该持有weak_ptr到另一个,而不是shared_