草庐IT

野指针

全部标签

C++ - 替代基类函数指针调用

我发现很多帖子都非常清楚地说明派生类函数不能被分配给基类函数指针。所以我想知道如何处理和解决以下情况:假设我有以下基类classbase{protected:typedefvoid(base::*base_fp)();typedefstd::maparray;arrayassociativeArray;};这个类的主要目的是拥有一个“associative-arrayoffunctions”属性。所以我想要的是每个派生的child都能够将他们的方法添加到“associativeArray”this->associativeArray["Method"]=&child::method;/

c++ - 有没有办法在递归中使用指针来查找数组的最小值?

首先,我是一个初学者,所以如果这个问题看起来有点愚蠢,我提前道歉。我确实知道一种使用递归来查找数组中最小值的方法,如下所示。intfindMinRec(intA[],intn){if(n==1)returnA[0];returnmin(A[n-1],findMinRec(A,n-1));}但是,我正在尝试找出一种使用递归和指针的方法。像这样:constint*min(constintarr[],intarrSize){有没有简单的方法可以做到这一点?我尝试以标准方式重新设计,但我似乎无法弄清楚如何使用指针来完成此操作。 最佳答案 您

c++ - 如何在此指针上应用限制限定符

如何将GCC/Clang的__restrict__限定符应用于类的this指针?这个问题的灵感来自RichardPowell的CppCon2018演讲,“HowtoArgue(ment).”我看到了一个类似的问题“restrictqualifieronmemberfunctions(restrictthispointer).”(所有代码都可以在CompilerExplorer上找到)voidbar();classFoo{public:intthis_example()const{if(value>0){bar();returnvalue;}else{returnvalue;}}priv

c++ - 构造函数参数,仅当实例为 const 时才接受指向 const 的指针

假设我有一个类:classA{B*b;public:A(B*pb):b(pb){}}并且我确保A的const方法永远不会修改b指向的对象。这样当A的实例是const时,持有Bconst*是安全的。Bconstb;Aa(&b);//compileerrorAconstca(&b);//compileerrortoo.HowcanIallowthisone 最佳答案 这不可能——构造函数甚至无法告诉对象是否(将要)const,更不用说用信息控制重载决议了。标准解决方法(通常用于迭代器)是制作A一个模板(即使它只有两个专业)并使用A来处理

c++ - const 指向成员的指针是否默认指向一个 int?

在玩指向成员的指针时,我遇到了一种似乎有点不一致并且对我来说有点违反直觉的行为。考虑以下虚拟结构:structfoo{intx;doubled;};和以下main():intmain(){intfoo::*ptr=&foo::x;doublefoo::*ptr2=&foo::d;}这里我们没有任何异常-两个指向const成员的指针。代码编译正常。引起我注意的是,当我们添加const时,情况发生了一点变化。考虑以下代码:intmain(){//nointordoubleafterconstconstfoo::*ptr=&foo::x;}代码在GCC8.2.01上编译良好。请注意,我没有指

c++ - "this"GDB 回溯中的指针变化

我正在检查核心转储,并注意到在一个帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是一点点不同,它从0x8167428变成了0x200。我不太精通GDB,但这对我来说似乎不对。这是有问题的吗?如果是,原因可能是什么? 最佳答案 如果在不同的对象上调用下一帧中的函数(即使对象是同一类型),则this指针可以在gdb跟踪中的帧之间改变,因为这是为了具体实例。这可能不是您的问题。0x200不是this的有效值,几乎可以肯定表示某种类型的内存损坏。this指针有时存储在堆栈中并作为不可见的第一个参数传递给函数。因此,如果您损坏了堆

c++ - 如何上下转换C++智能指针

两个客户端在消息层之上相互通信在消息正文中,我需要包含一个指向任何数据类型的字段我从客户端A发送字段为shared_ptr到消息层。我将此字段定义为shared_ptr在消息层。但是我怎样才能将这个字段转换回shared_ptr在客户B中?或者我应该定义shared_ptr在消息层中作为其他东西?谢谢 最佳答案 如果您使用的是boost::shared_ptr,那么您可以使用各种XXX_ptr_cast()函数(static_ptr_cast、dynamic_ptr_cast...)。如果您使用的是MSVC2010版本,我无法找到这

c++ - 如何将 C++ 引用传递给 C 函数的指针参数?

我只想在这里检查如何将引用传递给需要指针的函数。我在下面有一个代码示例。就我而言,我正在将C++引用传递给将更改我的值的C函数。我是否应该在此调用中使用运算符的“&”地址:retCode=MyCFunc(&myVar)?看来我是引用了引用,这在C++中是不允许的。但是,它编译得很好并且似乎可以工作。MainFunc(){intretCode=0;unsignedlongmyVar=0;retCode=MyCPlusPlusFunc(myVar);//usemyVarsnewvalueforsomechecks......}intMyCPlusPlusFunc(unsignedlong&

c++ - 自动实例化的智能指针

我正在寻找一种减少C++项目中header耦合的简单方法,这主要是由于(过度使用的)类组合,这当然需要完整的类型。例如://headerAclassA{Bb;//requiresheaderB};我也考虑过接口(interface)和pimpl,但是它们都暗示了一些我不想手动编写/支持的样板代码(或者有没有使之自动的方法?)。因此,我考虑过用一个指针和一个类似于classB*pB;的转发替换成员,但这需要处理对象的创建和删除。好的,我可以使用智能指针进行删除(虽然不是auto_ptr,因为它在创建时需要完整的类型,所以要说类似shared_ptrpB;这样的东西),但是现在如何进行对象

c++可能的空指针取消引用

我对一些代码运行了cppcheck以查找可能的运行时错误。并且它报告了以下情况下可能的空指针取消引用:Foo*x=...//definedsomewhere...Foo*y(x);//possiblenullpointerdereference.编辑:更好的例子for(inti=0;i来自cppcheck的错误消息:[C:\file.cpp:3]:(error)Possiblenullpointerdereference:x-otherwiseitisredundanttocheckifxisnullatline4但我不知道这怎么可能。 最佳答案