草庐IT

指针认证

全部标签

c++ - "cannot convert ' 这个从 'const hand' 到 'hand &' 的指针是什么意思? (C++)

当我尝试这样做时出现错误friendstd::ostream&operatorhand是我创建的类,show是std::ostream&hand::show(std::ostream&os,consthand&obj){returnos其中display声明为chardisplay[6]。有人知道这个错误是什么意思吗? 最佳答案 你需要让hand::show(...)成为一个const方法;向它传递obj引用是没有意义的——它已经将其作为“this”指针接收。这应该有效:classhand{public:std::ostream&s

c++ - 将指针转换为子类 (C++)

我正在开发一款游戏,我需要找到一种方法来获取游戏中某个“mapblock”的值(字符格式)。我有一个处理所有Sprite的DisplayableObject类,以及一个处理播放器对象的子类ThreeDCubePlayer。为了便于渲染/更新所有内容,所有DisplayableObject都存储在一个数组中,第0个单元包含播放器(类型为ThreeDCubePlayer)。ThreeDCubePlayer具有与DisplayableObject不同的构造函数(它需要两个额外的参数)并且只有ThreeDCubePlayer具有我需要的GetMap()函数。所以,这是我到目前为止所做的:Thr

c++ - 指针分配与正常声明

有时我会在各种C++程序中看到对象的声明和使用方式如下:object*obj=newobject;obj->action();obj->moreAction();//etc...这样做有什么好处,而不是简单地做:objectobj;obj.action();obj.moreAction();//etc 最佳答案 是的-您可以将指针存储在容器中或从函数中返回它,并且当指针超出范围时对象不会被销毁。使用指针避免不必要的对象复制,促进可选对象的创建,用于自定义对象生命周期管理,用于创建复杂的图形结构,对于上述的组合。这不是免费的——当你不

c++ - 这个指针的使用

我有一个关于“this”的用法的问题。假设我有两个类A和B;它们的大致轮廓如下:classA{public:...voidAddB(B*b){//insertsBintothevectorv}private:std::vectorv;};classB{public:...voidfoo(void){...//AddsitselftothequeueheldinAa.AddB(this);}};以这种方式使用“this”通常是不好的做法吗?感谢您的帮助。 最佳答案 不,只要您在所有权和删除方面小心谨慎,这没有任何问题。

c++ - 如何将指向成员函数的指针传递给 C 函数?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:UsingaC++classmemberfunctionasaCcallbackfunction我正在使用C库(winpcap)编写面向对象的库。我需要将网络数据包到达时调用的回调函数作为函数指针传递。我想将一个成员函数指针传递给winpcap,以保持我的设计面向对象并允许不同的对象接收不同的数据包。然而,据我所知,成员函数有不同的调用约定,因此不能传递给C函数。有没有办法来解决这个问题。我对boost::bind的实验(除了反复试验,我几乎无法使用它)没有成果。有没有办法改变成员函数的调用约定?这是我现在使

c++ - 为什么指针分配的内存在函数之后仍然存在,而不是数组?

所以,我在C++书中看到的基本文本输入函数的上下文中问这个问题:char*getString(){chartemp[80];cin>>temp;char*pn=newchar[strlen(temp+1)];strcpy(pn,temp);returnpn;}因此temp声明了一个包含80个字符的数组,这是一个自动变量,一旦getString()返回,其内存将被释放。有人建议,如果您出于某种原因返回temp,它在函数外部的使用将不可靠,因为一旦函数完成,该内存就会被释放。但是由于我也在相同的上下文中声明了pn,为什么它的内存没有被丢弃呢? 最佳答案

原始指针和 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