草庐IT

Pointers

全部标签

c++ - vector<vector<largeObject>> 与 c++ 中的 vector<vector<largeObject>*>

显然它会因您使用的编译器而异,但我很好奇执行vector>时的性能问题与vector*>,尤其是在C++中。具体来说:假设您的外部vector已满,您想要开始将元素插入到第一个内部vector中。如果外部vector只是存储指针,而不是存储整个内部vector,那么它将如何存储在内存中。是否必须移动整个外部vector以获得更多空间,或者移动内部vector(假设未预先分配空间),从而导致外部vector出现问题?谢谢 最佳答案 Vector在内部是一个指针,所以vector的指针有点矫枉过正。Vectorofpointersors

c++ - 一种动态分配多维数组的方法

敬礼..我在一本书中学习多维数组的动态分配,我找到了一些方法,现在没有问题了。但是这本书的作者给我们展示了一个方法,但是它并不能正常工作。是这样的:pbeans=newdouble[3][4];//Allocatememoryfora3x4array这是错误:errorC2440:'=':cannotconvertfrom'int(*)[4]'to'int*'我应该如何定义pbeans(如果这种类型的编码是合法的)?问题到底是什么?问候。 最佳答案 这在我的FAQonarrays中有介绍:double(*pbeans)[4];pbe

c++ - 指向 C++ 中内联 __asm block 的指针

所以我一直在VS2010中使用__asmblock,但我没能找到更好的方法来获取指向汇编block开头的指针。我知道如何做到这一点的唯一方法是声明一个void函数。一个问题是void函数在我的程序集block之前和之后都有自己的程序集,我必须通过获取函数的真实地址并添加偏移量来进行补偿。例子:C++voidmyfunc(){__asm{nopnopnopret}}会产生类似这样的装配:pushebpmovebp,espaddesp,8nopnopnopretnmovesp,ebppopebpretnmyfunc()如果执行,很可能会出错。 最佳答案

c++ - 具有指针结构的类是否需要析构函数

我有一个类,它有一个结构,其中一个成员是指针。structgroup{void*v1,void*v2;};classA{A(group&handle):m_handle(handle)private:groupm_handle;};类A中没有指针成员。当A中没有定义析构函数时,我没有看到任何问题(例如内存泄漏)。我了解到,当对象A超出范围时,会调用A的析构函数如果A中存在成员类,则调用它们的析构函数,依此类推。那么,像上面的m_handle这样的成员结构会发生什么-它们是否具有类似于析构函数的任何东西,以及当对象A超出范围时如何删除结构组中的两个空指针? 最

c++ - 将指针转换为 int/将指针存储为类型 T

我希望计算一个指针被使用了多少次。我有一张map:staticstd::mapcounters;当我想向它插入一个新值时,我会像这样使用它:templateMyClass::addPointer(T*tPtr){counters[((unsignedint)tPtr)]++;}做这样的类型转换可以安全吗?这不是一项昂贵的手术等吗?另外,这是确保每个指针只得到一个计数的合适方法吗?谢谢 最佳答案 IMO,您真的不需要将其转换为unsignedint。您可以使用void*获取map:staticstd::mapcounters;空检查在

c++ - 指针 vector

如果我在类头中有这样的定义:vectorbaddies;然后我在构造函数中初始化如下:Class::Class(vectorinput){baddies=input;}我最终会得到什么?有两组指向对象的指针的两个vector?简单地指向原始vector会更好吗?这可能吗?或者在类中保存一个指针引用vector以避免重复指针会更好吗?访问多个类中的对象和对象数组的最佳实践是什么?引用?指针?指针引用?提前致谢! 最佳答案 这取决于您要提供的语义。在C++11中,您可能想要做的是:Class::Class(vectorinput):ba

vector 中不存在 C++ 字符串成员变量

我正在创建一个vector,其中包含指向基类的指针。在此vector中,我动态存储指向包含一些成员变量的派生类的指针,其中之一是字符串变量名。#include"stdafx.h"#include#include#include#includeboolhasDirection=false;boolhasDiameter=false;intdirection;floatdiameter;intstarDimension=0;intanimalDimension=0;intfishDimension=0;classMovingObject{protected:std::stringname;

c++ - 将二维数组作为参数传递

我正在尝试将二维数组传递给接受指向指针的指针的函数。而且我了解到二维数组不是指向指针的指针(指向一维数组的指针)。我在编译以下代码时遇到此错误。#includevoidmyFuntion(int**array){}intmain(){intarray[][]={{1,2,3,4},{5,6,7,8,9},{10,11,12,13}};myFuntion(array);return0;}在函数“intmain()”中:第5行:错误:将“数组”声明为多维数组必须对除第一个维度之外的所有维度都有边界编译因-Wfatal-errors而终止。如果可能的话,任何人都可以消除我对此和一些文档的疑问

c++ - 指针被释放

我不明白下面的代码有什么问题。它会生成“正在释放的指针未分配”错误。#include"mpi.h"usingnamespacestd;voidchangeArray(bool*isPrime){delete[]isPrime;isPrime=newbool[10];}intmain(intargc,char*argv[]){intsize,rank;MPI_Init(&argc,&argv);MPI_Comm_size(MPI_COMM_WORLD,&size);MPI_Comm_rank(MPI_COMM_WORLD,&rank);bool*isPrime=newbool[1000]

c++ - 删除多个列表指向的数据?

我有一个可能会出现在多个列表中的对象。例如std::listlista=newstd::list();std::listlistb=newstd::list();object*obj=newobject();lista->push_front(obj);listb->push_front(obj);可能有许多对象将以相同的方式出现在两个列表中。我意识到智能指针是很容易做到的事情,但称我为受虐狂-我更愿意弄清楚如何在没有智能指针的情况下做到这一点。目前,我正在尝试这种技术:td::list::iteratoriter;for(iter=lista->begin();iter!=lista