草庐IT

Pointers

全部标签

c++ - 删除指针的时间

黑社区,我有一个关于删除指针的小问题。我正在使用维度为1024x1024的指针到指针矩阵。因为我是动态创建它们的,所以我在程序结束时删除了为它们分配的空间。但是在通常的循环中这样做会花费很多时间——我使用处理器的时钟速率测量了大约2秒。当程序只运行15秒时,2秒是巨大的-另外:使用这些分配的指针的函数被调用不止一次......。这是测量的时间关键代码段,包括测量:time=clock();for(i=0;i删除指针总是那么长吗?还是我只是以错误的方式做事?我希望这里有人能帮我解决这个问题。由于我正在优化一个相当复杂的程序以使其运行得更快,所以我不能使用那些2秒的代码。与所有其他部分相比

c++ - 删除 getenv() 返回的字符数组

我是否应该释放为char数组分配的内存,指向它的指针由char*getenv(char*)函数返回?哪种方式-Cfree()或C+delete[]?如果不是-为什么?我的意思是:char*ptr=getenv("LS_COLORS");cout谢谢。 最佳答案 原始数据存储在environ变量中(这是一个char*数组,包含所有环境变量及其值),getenv()只搜索相应的变量名并返回它的值在environ变量中的位置,所以你不必释放它,否则可能会发生未定义的行为。 关于c++-删除ge

c++使用结构中的指针保存和加载游戏

我知道我可以使用:MyGamegame;//thegameobject//ofstreamout("mygame.bin",ios::binary);out.write((char*)&game,sizeof(MyGame));保存和加载游戏,但是如果我在MyGame结构中有指针怎么办?指针会被保存而不是它指向的数据吗?以及:如何解决这个问题? 最佳答案 您不能只将指针写入流并期望它神奇地完成。您需要在对象中实现保存/加载方法。例如:classSerializable{virtualvoidsave(std::ofstream&_o

c++ - 取消引用指针的地址?

我在工作中处理其他人的代码(Qt桌面应用程序)并发现了这个:connect(&*mpMainWin,SIGNAL(whatever()),this,SLOT(whatever())));我在理解&*mpMainWin部分时遇到一些困难。据我所知,它返回取消引用的指针mpMainWin的地址。但是mpMainWin已经保存了那个地址,所以直接将它作为参数提供应该有相同的结果。所以如果我没有遗漏任何东西并且我的逻辑是正确的,那么做这样的事情的原因是什么?如果有的话,我们应该在什么时候使用这种语法? 最佳答案 这可以用作将智能指针(即不是

c++ - 正确初始化智能指针数组

对于这种情况:classA{//implementation};classB{public:B();~B();private:std::vector>_innerArray;};我应该在B()中做什么来创建一个具有有效状态的对象?我是否需要为数组中的每个A对象手动调用默认构造函数?我是否需要在~B()中做一些特别的事情?如果B类是糟糕设计的例子,请随意说出如何让它变得更好。谢谢。编辑所以,这是我真正需要的方案。因此,仅存储在A数组中的真实值和所有其他对象都用于存储连接。最简单的示例-A=点,B=通过选定点的线(或曲线),C=由线描述的平面。希望它能使问题更准确。

c++ - 在 shared_ptr 容器中查找元素?

我在查找shared_ptrvector中的元素时遇到了一点问题。这是我最终得到的结果:std::vector>blocks;boolcontains(Block*block){for(autoi=blocks.begin();i!=blocks.end();++i){if((*i).get()==block){returntrue;}}returnfalse;}但是,我没能用std::find甚至std::find_if做到这一点。是否有更符合C++标准的方法来实现这一目标?编辑:这是我在回答之后的代码:boolcontains(Block*block){autofound=std:

C++ 继承 - 如何使用指向基类对象的指针访问子方法

我有一个处理继承的任务。我有一个Employee()基类,Manager()和Intern()继承自该基类。我的导师给了我们以下指示:在main()中声明一个员工指针数组并将它们初始化为以下记录:Manager("IT",100,"MF1","ML1")Manager("HR",50,"MF2","ML2")Intern("SIUE",0,"IF1","IL1")Intern("SLU",0,"IF2","IL2")然后我必须遍历并显示数组。他作为示例提供的输出显示必须调用Manager()和Intern()toString()方法,因为输出了与子类相关的特定信息。但是,在访问数组时,

c++ - 释放 : A** mat = new A*[2]; 的内存

我定义了:A**mat=newA*[2];但是我怎样才能删除它呢?使用delete[]mat;或delete[]*mat;? 最佳答案 它是delete[]mat;仅当您不进行额外分配时。但是,如果您在数组数组中分配了数组,则还需要删除它们:A**mat=newA*[2];for(inti=0;i!=2;i++){mat[i]=newA[5*(i+3)];}...for(inti=0;i!=2;i++){delete[]mat[i];}delete[]mat; 关于c++-释放:A**m

c++ - 使用 typedef 的多指针声明

在C++中,如果我们想声明多个指针,我们会这样做:int*a,*b,*c;我们必须在其中放置一个星号*在他们每个人面前。如果我写这段代码:typedefint*ptr;ptra,b,c;?它们都是指针,还是只是一个指针? 最佳答案 不,typedef不仅仅是文本替换的问题(就像宏一样)。typedefint*ptr;为int*类型引入一个新名称“ptr”。如果你写ptra,b,c;所有a、b和c都将具有相同的类型,int*。注意constptrp;同样不等于constint*p;因为ptr是指针类型,const适用于指针;等价于in

c++ - 为什么我们可以将取消引用的指针递增到 C++ 中的常量数据?

令我惊讶的是,C++允许递增指向常量数据的解引用指针,而它不应该允许通过指向常量数据的指针。考虑代码:#include#includeusingnamespacestd;intmain(){intx=2;constint*xPtr2=&x;*xPtr2++;cout但是x的值仍然是2。这意味着*xPtr2实际上并没有增加。我也试过*xPtr2=3,但是这次显示编译错误。为什么会这样? 最佳答案 此处++的优先级高于*。因此*xPtr2++相当于*(xPtr2++)由于xPtr2不是常量指针而是指向常量数据的指针,因此在这种情况下递增