草庐IT

$双指针

全部标签

c++ - 应该在策略模式中使用安全指针吗?

给定一个典型的策略模式classStrategy{public:virtualintexecute()const=0;}classStrategyA:publicStrategy{public:intexecute()constoverride;}classStrategyB:publicStrategy{public:intexecute()constoverride;}我相信实现上下文类的“pre-C++11”方式类似于classContextRaw{public:ContextRaw(Strategy*the_strategy);~ContextRaw();//Shouldthi

C++ - 为数组分配内存的安全性,然后返回要在外部删除的指针

我目前正在学习C++,但有些事情我不清楚。如果我创建一个函数,为某种类型的数组分配内存,然后返回新创建的指针,假定该指针只是一个内存地址,相应的delete语句是否会清理所有分配的内存都正确,还是只会释放第一个元素,从而导致数组其余部分发生内存泄漏?如果它被正确清除,那么C++如何知道要释放什么,因为我假定返回类型中固有的上下文丢失?int*AllocateSomething(){int*arr=newint[100];//fillthearraywithsomething...returnarr;}intmain(){int*p=AllocateSomething();deletep

所有指针的 C++ 模板和所有数组的模板

我正在寻找以下问题的解决方案:我有一个类,我想在其中为所有类型的指针和所有类型的指针重载运算符(在本例中为&)阵列。在数组的实现中,我需要访问arraysize,在指针的实现中,我必须能够对取消引用的对象执行某些操作。正如指出的那样here,数组的方式很清楚:templatevoidoperator&(T(&arr)[N]){cout但对于指针来说,以下都不起作用://ifIusethis,theoperatorgetsambigousforarraystemplateinlinevoidoperator&(T*p){cout是否有任何好的和干净的解决方案来实现运算符对任意数组和任意指

c++ - 如何将成员函数指针传递给采用常规函数指针的函数?

我有一个播放器类,看起来像这样(精简到这个问题所需的内容):classPlayer{public:Player();~Player();voidkill();voiddeath();voidreset();};kill()、death()和reset()函数如下所示:voidPlayer::kill(){void(*dPtr)()=&death;Game::idle(dPtr,48);}voidPlayer::death(){reset();}voidPlayer::reset(){//resets}idle函数是Game的一个静态成员函数,它接受一个函数指针和一个整数n,并在ntic

C++ 读取内存地址/指针和偏移量

所以,我已经将一个DLL注入(inject)到一个进程(一个游戏)中,以便我可以从进程内存中读取。我想获取当前的游戏时间,我已经使用CheatEngine找到了它的静态基地址和偏移量:"游戏.exe"+0158069C偏移量:14这是我试图获取浮点值(当前游戏计时器)的代码://Offsets#defineBASETIME0x158069C#defineOFFSET0x14voidCurrentTime(){float*time;DWORD*BaseAddress=(DWORD*)GetModuleHandle(NULL);DWORD*BaseTimeAddress=(DWORD*)(

c++ - std::function 签名指针 vs 指针引用 = 没有区别?

这是代码示例:#include#includestructFoo{};typedefboolfunc_type(Foo*&,conststd::string&);typedefstd::functionFunctionalType;boolf(Foo*,conststd::string&){}intmain(){#if1func_type*func;func=f;#elseFunctionalTypef2;f2=f;#endif}如您所见,我已将“对指针的引用”声明为第一个参数的函数类型Foo*&,我希望该函数仅以“指针”作为第一个参数Foo*不能分配给这种类型的变量。#if1regi

c++ - 为什么 CreateWindow() 函数需要 WindowClass 的名称成员而不是指向类本身的指针?

我正在阅读Luna的《使用DirectX11进行3D游戏编程的介绍》。我一直为Linux命令行编程,所以我决定从阅读附录A开始,这是一本win32编程入门书,但我不了解创建窗口()函数。它的第一个参数是您要创建的窗口类的名称-所以您首先必须声明一个窗口类,然后“注册”它(我假设这意味着将类添加到神秘的win32API中某处的某个类堆栈),然后将窗口类的lpszClassName成员传递给函数,如下所示:WNDCLASSwc;//setallthevariousmembersofwcwc.lpszClassName=L"BasicWndClass";RegisterClass(&wc);

c++ - 使用基类而不是基指针来处理派生类

我有一个像这样的基础抽象类;classX{public:virtual~X(){}virtualdoSomething()=0;};然后我用几个类(如Y、Z等)来实现它,每个类都有自己的构造函数、析构函数和doSomething实现。在我的主要职能中,我这样做;intmain(){std::vectorv;X*x1=newY();X*x2=newZ();v.push_back(x1);v.push_back(x2);for(autop:v){p->doSomething()}}这会按预期调用相应的doSomething实现。但我的问题是我使用指向抽象类的指针通过其基类来操纵派生类的层次

c++ - 为什么这会在 const 方法中返回一个 const X* const 指针?

我在理解以下错误时遇到了麻烦:Error1errorC2440:'=':cannotconvertfrom'constX*const'to'X*const'我正在尝试使用指向const指针的指针在树遍历期间跟踪节点:boolIsValid()const{X*const*previousNode=newX*;returnthis->IsValid(previousNode);}boolIsValid(X*const*previousNode)const{...if(!*previousNode)*previousNode=this;//Error...returntrue;}为什么thi

c++ - 数组指针的增量

我试图理解为什么以下C++代码无法编译intmain(){inta[10];int(*p)[10]=&a;int*q=static_cast(++p);}如果不是很明显,我尝试做的是使用指针算法找到指向数组末尾的指针。到目前为止,我的理解是p具有指向十个整数数组的类型指针,表达式++p也是如此。通常,我可以将一个int数组分配给一个指向int的指针类型的变量,但这在递增的指针++p上失败了。我第一次尝试不使用static_cast但那也没有用。 最佳答案 phastypepointertoarrayoftenints这是正确的。No