草庐IT

Pointers

全部标签

c++ - 对指针列表进行排序

我又一次发现自己在使用C++完成一些非常简单的任务时失败了。有时我希望我可以从Java中的OO中学习我所知道的一切,因为我的问题通常是从像Java一样思考开始的。无论如何,我有一个std::list我想排序。假设BaseObject是:classBaseObject{protected:intid;public:BaseObject(inti):id(i){};virtual~BaseObject(){};};我可以对指向BaseObject的指针列表进行排序带有比较器结构:structComparator{booloperator()(constBaseObject*o1,const

c++ - static_cast 可以将非空指针转换为空指针吗?

我需要为回调函数编写代码(它将在ATL中调用,但这并不重要):HRESULTcallback(void*myObjectVoid){if(myObjectVoid==0){returnE_POINTER;}CMyClass*myObject=static_cast(myObjectVoid);returnmyObject->CallMethod();}这里的void*保证是指向CMyClass的指针,所以static_cast是合法的。我关心的是代码必须尽可能可移植(至少对于较新版本的VisualC++)。所以super偏执狂我也倾向于检查CMyClass*指针-我的意思是如果结果为空

c++ - 了解引用与指针。为什么这行得通?

通过seriesofSOquestions变得显而易见今天,我对指针、引用和值的真正本质知之甚少。考虑以下代码:int*p=newint(3);int&r=*p;cout这个的输出是p=0x1001000b0*p=3&r=0x1001000b0r=3&r=0x1001000b0r=3&r=0x1001000b0r=4我不明白的是为什么我第二次打印引用的值时没有出错。与引用值对应的指针已被删除。来self的previousquestion,我几乎说服自己,任何像r=x这样的语句都会复制x来代替r所指的值.但是,如果是这种情况,那么p和&r将是不同的地址,对吧?如果我已经在0x100100

c++ - 在 C/C++ 中向指针添加 1 个字节的正确方法是什么?

我现在正在使用这段代码将指针移动1个字节,但我感​​觉有些不清楚..int*a=(int*)malloc(sizeof(int));void*b=((char*)a)+1;char是1个字节,但未定义为字节操作目的。我相信还有另一种方法可以执行此byte操作。byte操作的正确方法是什么?附言。我修改了示例代码以使其有效。它现在使用Clang编译为C++。 最佳答案 我觉得你很困惑:charis1byte,butnotdefinedforbyteoperationpurpose.Ibelievethere'sanotherwayto

c++ - 如何使用 vector 通过指针引用递归结构

我有一些结构,我们称它们为sn,它看起来像:structsn{stringname;vectorconnected_to;};现在,假设我已经从0-9声明了connected_tovector;我正在将snA连接到snB:A.connected_to[0]=&B;我有一种感觉,我正在以错误的方式处理这件事。基本上我想做的是在连接结构时避免复制结构......即:structsn{stringname;vectorconnected_to;};//...A.connected_to[0]=B;这会复制任何东西吗?更根本的问题当然是我不明白vector、指针和引用是如何真正深入地工作的。

C++ * vs [] 作为函数参数

有什么区别:voidfoo(item*list){cout和voidthis(itemlist[]){cout假设项目是:structitem{char*string;}指针指向字符数组的第一个和list只是一个项目数组... 最佳答案 对于编译器来说,没有区别。虽然读起来不一样。[]表示您想要将数组传递给函数,而*也可能意味着只是一个简单的指针。请注意,当作为参数传递时,数组会衰减为指针(以防您不知道)。 关于C++*vs[]作为函数参数,我们在StackOverflow上找到一个类似

c++ - 在 dynamic_casting 之后删除指针是否安全?

voidfoo(MyClass*myClass){BaseClass*pBaseClass=dynamic_cast(myClass);deletemyClass;//一般来说,dynamic_cast是如何工作的?(它像复制构造函数一样工作吗?) 最佳答案 不,那是不安全的。dynamic_cast只是一种类型转换——原始指针和转换后的指针都指向同一个对象。转换后的指针可能会指向一个稍微不同的地址(如果涉及多重继承),但它仍然指向(in)同一个对象-不会发生对象复制。编辑:我的意思是“不安全”,意思是“在您删除myClass之后,

c++ - new 和 make_shared 用于共享指针

我遇到了this@kerekSB状态的帖子和答案之一std::shared_ptrp1=std::make_shared("foo");std::shared_ptrp2(newObject("foo"));Inyourcode,thesecondvariableisjustanakedpointer,notasharedpointeratall.Nowonthemeat.make_sharedis(inpractice)moreefficient,becauseitallocatesthereferencecontrolblocktogetherwiththeactualobject

c++ - 在 C++ 中将一个指针复制到另一个指针

#includeusingnamespacestd;intmain(intargc,char**argv){inta=5;int*p,*q;*p=a;*q=*p;//line6cout此程序挂起。问题似乎出在第6行。这是为什么? 最佳答案 是的,那些是悬空指针,你会遇到未定义的行为。您不能取消引用指向不属于您的内存的指针:int*p;*p;//illegalint*x=NULL;*x;//illegalint*y=newint;*y;//OK!正确的版本应该是:intmain(intargc,char**argv){inta=5;i

c++ - 是否可以在可移植 C++03 代码中散列指针?

是否可以在C++03中可移植地散列一个指针,它没有std::hash定义?包含指针的哈希值在C++中是不可能的,这似乎很奇怪,但我想不出任何制作它们的方法。我能想到的最接近的方法是做reinterpret_cast(ptr),但是uintptr_t不需要在C++03中定义,我不确定即使定义了该值是否可以合法操作......这甚至可能吗? 最佳答案 不,一般来说。事实上,如果没有std::hash,在C++11中通常是不可能的。.原因在于值(value)和值(value)表示之间的差异。您可能还记得用于演示值与其表示之间的区别的非常常