草庐IT

指针认证

全部标签

c++ - 如何在不在 C++ 中创建函数对象的情况下将函数指针作为模板值参数传递?

我在这里看到过这个问题的许多变体,但我仍然觉得我的具体情况有所不同。我的目标是包装一个如下所示的CAPI:TF_Buffer*buf=TF_AllocateBuffer();//...TF_DeleteBuffer(buf);因为我有很多这样的对象,所以我想创建一个名为handle的通用类型,它可以保存给定的指针并在销毁时调用适当的释放器。我想象的用例是classbuffer:publichandle{public:buffer(TF_Buffer*b):handle(b){}}不幸的是,我无法让它工作,因为TF_DeleteBuffer是一个简单的函数(类型为voidTF_Delet

c++ - 如何传递唯一指针

我有一个容器类,它有一个数据成员。std::vector>Functions;这就是我为vector增加值(value)的方式。MaxSize是Sum_Function的子项。voidWavefrontRenderer::AddMaxSize(){Containercont;std::unique_ptrptrMaxSize=std::make_unique();cont.AddFunction(ptrMaxSize);}这是Container类中Function的定义。voidContainer::AddFunction(std::unique_ptr&func){std::uniq

c++ - 不能使用指针作为默认模板参数

我正在尝试使用默认原始指针作为默认模板参数。我读到非类型模板参数仅限于整数类型、枚举、指针和引用。对于引用,我没有遇到任何问题,但是当我尝试使用指针时,我遇到了这样的错误:error:non-typetemplateargumentoftype'Engine*'isnotaconstantexpression.这是我的代码:#include#includeusingstd::cout;usingstd::endl;classEngine{public:voidstartEngine(){m_started=true;coutclassCar{public:explicitCar(con

c++ - 将 RAII 与字符指针一起使用

我看到很多RAII示例类环绕文件句柄。我曾尝试将这些示例改编为字符指针,但运气不佳。我正在使用的库具有获取字符指针地址的函数(声明为get_me_a_string(char**x))。这些函数为该字符指针分配内存,并留给库的最终用户在他们自己的代码中清理它。所以,我的代码看起来像这样......char*a=NULL;char*b=NULL;char*c=NULL;get_me_a_string(&a);if(a==NULL){return;}get_me_a_beer(&b);if(b==NULL){if(a!=NULL){free(a);}return;}get_me_someth

c++ - 是否有可能我有一个类的前向声明,而不是在头文件中使它们成为引用或指针

//Iprefertoperformforwarddeclarationonmyclass,asIdonot//wishtoship"myclass.h"toclient//However,thefollowingcodedoesn'tallowmetodoso,asclassdefination//isneededinheaderfile.////a.h#include"myclass.h"classa{public:a();myclassme;};我尝试换一种方式。但是,我需要使用动态分配,而我通常会尽量避免这种情况。//a.hclassmyclass;classa{public:

c++ - 将指针临时绑定(bind)到引用

请引用下面的代码。在此代码中,我将test.c_str()返回的constchar*存储到一个引用中。我的问题是-data是否会正确引用test的内容?我认为test.c_str()返回的ptr将是临时的,如果我将它绑定(bind)到一个引用,该引用将无效。我的想法对吗?classRefPtrTest{std::stringtest;StoringClassstoringClass;public:RefPtrTest():test("hello"),storingClass(test.c_str()){}}存储类在哪里classStoringClass{constchar*&data;

C++ 删除 static_cast<void*> (指针)行为

假设代码执行以下操作:T*pointer=newT();deletestatic_cast(pointer);结果是什么?未定义,内存泄漏,内存被删除? 最佳答案 行为未定义。关于delete表达式,C++标准说:Inthefirstalternative(deleteobject),ifthestatictypeoftheoperandisdifferentfromitsdynamictype,thestatictypeshallbeabaseclassoftheoperand’sdynamictypeandthestaticty

c++ - 解决 C++ 中不明确的 this 指针

我正在尝试从旧类派生新类。基类声明如下所示:classDriver:publicPlugin,publicCmdObject{protected:Driver();public:staticDriver*GetInstance();virtualEngine&GetEngine();public://Pluginmethods...virtualboolInitPlugin(Mgr*pMgr);virtualboolOpen();virtualboolClose();//CmdObjectvirtualboolExecObjCmd(uint16cmdID,uint16nbParams,

c++ - 删除前在 C++ 中测试 void 指针

我有一个C++数组:Player**playerArray;它在它所在的类的构造函数中被初始化。在我的析构函数中:deleteplayerArray;除了通过Valgrind测试程序时它说有一些删除到空指针的调用:operatordelete(void*)我想在调用delete之前测试playerArray是否为空指针以避免此错误。有人知道怎么做吗? 最佳答案 也许你的意思是delete[]playerArray。如果指针是数组而不是单个实例,则需要[]。 关于c++-删除前在C++中测

c++ - 杂乱的函数指针 : how to remove the warning?

正如我在thispost中提问和回答的那样.我有以下示例代码。#includecharfoo(){return'a';}charbar(){return'b';}charblurga(){return'c';}charbletch(){return'd';}char(*gfunclist[])()={foo,bar,blurga,bletch};char(*(*x())[])(){staticchar(*funclist[4])()={foo,bar,blurga,bletch};returnfunclist;}intmain(){printf("%c\n",gfunclist[0](