草庐IT

$双指针

全部标签

c++ - 推导出指向成员模板参数的指针

考虑具有成员变量的类,如下所示:structA{inta;charb;};structB{doublec;boold;};是否可以声明一个接受模板的模板类argument指向声明的任何成员的成员对象指针在上面的类(class)中?接受通用指针到成员对象的类可以是声明和使用如下:templatestructMagic{};//Usage:typedefMagicMagicWithA_a;不幸的是,必须传入Class和每次都键入模板参数以使最终指针起作用。有什么方法可以通过偏特化推导出这些论点,例如?也就是说,如何声明Magic类来使以下定义有效吗?typedefMagicMagicWit

C++ 引用指针作为改变指针的参数

我最近遇到了*&作为函数中的参数。据我了解,它类似于**。为什么在改变指针的函数中需要它?例如。使用new关键字假设我有一个指针int*a,如果我想执行a=newint;为什么我必须将参数作为“指针引用”传递>在那个函数里面? 最佳答案 如果函数以int*为参数,那么指针本身是按值传递的,这意味着函数内部对指针本身(不是指针对象)的任何修改与原始指针。例如voidfoo(int*a){a=newint;}int*a=nullptr;foo(a);//aisstillnullptrhere如果你把参数类型改成int*&会不一样void

c++ - 返回该对象(不是作为指针)时是否不打算调用析构函数?

我有一个函数:staticBwahboo(){Bwahbwah;returnbwah;}还有一个主要功能:intmain(){Bwahboo=Assigner::boo();coutBwah的析构函数仅在“到达此处”打印后调用一次。这是有保证的还是编译器优化? 最佳答案 这是一种称为返回值优化(RVO)的优化。这是一个常见的优化,但您不能依赖它。这里有两个非常好的链接,可以帮助您了解更多信息:首先,一篇关于passbyvalue,rvaluesemantics,thereturnvalueoptimization,andrvalue

c++ - 如何在不使用文件指针的情况下在 libcurl 中发送长 PUT 数据?

我正在尝试与GoogleContactAPI交互,为了更新远程端的联系人,我需要使用PUT请求而不是POST。由于我要PUT的数据已经在内存中了,所以我真的不想处理文件指针,这似乎是CURLOPT_READDATA的默认行为。因此,我知道除此之外我还需要使用CURLOPT_READFUNCTION,但我无法理解其中的逻辑。这是相关文档:http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTREADFUNCTION打印传入的变量,我看到nmemb=16372和size=1。例如,如果我的数据大小为100K,我需要实现的逻辑是

c++ - 如何删除指向指针的指针?

在C++中,如果将指向指针的指针传递给方法,是否先删除引用的指针?你必须在方法中清理它吗?我正在任务管理器中检查内存,它正在泄漏!谢谢!! 最佳答案 你像这样删除一个指向指针的指针:int**p=0;p=newint*;//createfirstpointee*p=newint;//create2ndpointee**p=0;//assign2ndpointee//freeeverythingdelete*p;deletep;删除传递给方法的指针对我来说似乎很不寻常。但无论如何:voidfreeme(int**p){delete*p

c++ - 为什么 this 指针地址与析构函数中的预期地址不同 (c++)

我对基类析构函数中的this指针有一个奇怪的问题。问题描述:我有3个类(class):A1、A2、A3A2公开继承自A1并私有(private)继承A3classA2:privateA3,publicA1{...}A3有一个函数getPrimaryInstance()...返回一个A1类型的引用到A2实例:A1&A3::getPrimaryInstance()const{staticA2primary;returnprimary;}A3构造函数如下所示:A3(){getPrimaryInstance().regInst(this);}(其中regInst(...)是A1中定义的函数,它

c++ - 将字符串解析为指针

假设我将内存地址作为字符串表示(例如“0x27cd10”)。如何将其转换为指针(void*)?即intmain(){constchar*address="0x29cd10";void*p;//Iwantptopointtoaddress0x29cd10now...return0;} 最佳答案 strtol允许您在解析字符串时指定基数(16,十六进制,或0以根据输入中的0x前缀自动检测)。将指针存储为整数后,只需使用reinterpret_cast来形成指针。 关于c++-将字符串解析为指

c++ - 智能指针问题

我正在用智能指针重写我的代码。我有这样的情况:voidFoo(SomeClass*p){}boost::shared_ptrp(newSomeClass);现在该怎么做:从包​​装器(p.get())传递原始指针或重写函数参数并直接传递智能指针,如:voidFoo(boost::shared_ptrobj){}我不确定。据我了解智能指针应该遵循一些指针并查看它是否仍然需要在程序中。所以我们可以传递原始指针。 最佳答案 除非Foo需要获取(共享)*p的所有权,否则您应该保持签名不变,只需传递p.get()。这是最简单、最灵活的选项,并

c++ - 如何在字符指针(C++)中打印数据?

我有一个function(constchar*data){//howtoprintthedatawhichisinsidethedata}当我调试时,我只看到地址。如果我打印(*data)什么也不会打印。有什么想法吗? 最佳答案 #includevoidfunction(constchar*data){std::cout 关于c++-如何在字符指针(C++)中打印数据?,我们在StackOverflow上找到一个类似的问题: https://stackover

c++ - 在 C 中,将函数指针赋值给适当类型的变量给出 "cannot convert ... in assignment"

采用以下C/C++代码:#includeintinc(inti){returni+1;}//int→int,likeabs()//bazisbool→(int→int)int(*baz(boolb))(int){returnb?&abs:&inc;}intmain(){int(*foo(bool))(int);//foois&(bool→(int→int))foo=baz;}尝试编译这个(gcc或g++)给出:$g++test.cctest.cc:Infunction‘intmain()’:test.cc:9:error:assignmentoffunction‘int(*foo(bo