草庐IT

Pointers

全部标签

c++ - std::string 类成员应该是指针吗?

为什么/为什么不呢?假设我有一个类,它在构造函数中接收一个字符串并将其存储。这个类成员应该是一个指针,还是只是一个值?classX{X(conststd::string&s):s(s){}conststd::strings;};或者...classX{X(conststd::string*s):s(s){}conststd::string*s;};如果我要存储原始类型,我会复制一份。如果要存储对象,我会使用指针。我觉得我想要复制那个字符串,但我不知道什么时候决定。我应该复制vector吗?套?map?整个JSON文件...?编辑:听起来我需要阅读移动语义。但无论如何,我想让我的问题更具

c++ - C++ 中的结构偏移量和指针安全

这个问题是关于使用带结构偏移量的指针算法派生的指针。考虑以下程序:#include#include#includestructA{floata;doubleb;intc;};staticconstexprautooff_c=offsetof(A,c);intmain(){A*a=newA{0.0f,0.0,5};char*a_storage=reinterpret_cast(a);int*c=reinterpret_cast(a_storage+off_c));std::cout这个程序似乎可以在我测试的编译器上运行并给出预期的结果,使用默认设置和C++11标准。(一个密切相关的程序,

c++ - vector in struct 耗时吗?使用指针更好吗?

我在C++中有一个这样的结构:structMyStruct{someTypev1;someType2v2;someType3v3;someType4f1();std::vectormyVector;};它会经常以这样的形式使用://someprocess...afterwhichastd::vectorvec1isgeneratedMyStructmyStruct;myStruct.myVector=vec1;由于vec1比较大。我想知道通过执行分配myStruct.myVector=vec1;是否花费很多时间我是否应该在MyStruct中使用指向myVector的指针来使其更快?如何

c++ - 为什么我们甚至需要删除运算符? (我们不能只使用 delete[])

我今天正在阅读有关delete和delete[]运算符的内容,我可以看到要释放分配给myChar的内存,我应该调用delete并为myCharArray释放内存我应该使用delete[].但是我一直认为myChar是指向大小为1的数组的指针。那么为什么我们在这种情况下使用delete?为什么我们需要delete呢?如果myChar实际上是一个大小为1的数组,我们难道不能到处使用delete[]吗?char*myChar=newchar;char*myCharArray=newchar[5];deletemyChar;delete[]myCharArray;

c++ - 将指针从 C 传递到程序集

我想在我的C/C++程序中使用“_test_and_setlock”汇编语言实现和原子交换汇编指令。classLockImpl{public:staticvoidlockResource(DWORDresourceLock){__asm{InUseLoop:moveax,0;0=InUsexchgeax,resourceLockcmpeax,0jeInUseLoop}}staticvoidunLockResource(DWORDresourceLock){__asm{movresourceLock,1}}};这有效,但这里有一个错误。问题是我想传递DWORD*resourceLock而

c++ - 哪种转换是从 Type* 到 void*?

在C++中,对于任何数据类型,我都可以执行以下操作:Type*typedPointer=obtain();void*voidPointer=typedPointer;当我将Type*分配给void*时执行哪个转换?这和Type*typedPointer=obtain();void*voidPointer=reinterpret_cast(typedPointer);还是其他Actor? 最佳答案 这是一个标准的指针转换。由于它是标准转换,因此不需要任何显式转换。如果您想使用显式转换重现该转换的行为,则应使用static_cast,而

c++ - C/C++指针问题

tl;dr-您能否扩展下面第一个代码片段中的4条评论?deref具体是什么意思我是一名资深Java开发人员,希望学习C++。我遇到了thiswebsite针对我这种情况的开发人员。intx,*p,*q;p=newint;cin>>x;if(x>0)q=&x;*q=3;//1.derefofpossiblyuninitializedptrqq=p;p=newint;//2.potentialstorageleak(ifx!=0this//memorywillnotbereturnedtofreestorage)*p=5;deleteq;*q=1;//3.derefofdeletedptr

C++:指针和作用域

int*test(){inta=5;int*b=&a;returnb;}test的结果会是一个坏指针吗?据我所知a应该被删除然后b会变成一个乱七八糟的指针,对吧?更复杂的东西怎么样,不是一个int指针,而是一个有20个左右成员的类? 最佳答案 您返回的术语是“danglingpointer”。a是分配在栈上的局部变量,一旦超出范围就不再可用(这与垃圾回收完全不同)。尝试使用调用test()的结果将是未定义的行为。另一方面,如果您没有在堆栈上分配a--(int*a=newint(5);),那么int*b=a;returnb;会很好,尽

c++ - 数据在内存中的顺序

几个简单的问题。constintgFirst;constintgSecond;structData{staticintFirst;staticintSecond;intfirst;intsecond;};Datadata;是否能保证以下陈述都是正确的?&gFirst&Data::First&data.first 最佳答案 1)这个结果是未指定的。2)此结果未指定。*3)是的。标准中的相关部分是§5.9/2。指针之间的关系比较p和q仅在以下情况下指定:p和q指向同一个对象或函数,指向同一个数组末尾的一个,或者两者都为空。在这种情况下,

c++ - 视觉 C++ 2008 : debugging data behind pointer array

如何在VisualStudio2008中查看数组指针后面的数据而不是第一项?如果能看到任意数量的项目,而不仅仅是第一个,那将非常有用。 最佳答案 char*p=newchar[100];在监window口中输入:p,100 关于c++-视觉C++2008:debuggingdatabehindpointerarray,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3659108/