草庐IT

C++智能指针之unique_ptr

全部标签

c++ - 引用指针的可选参数?

如何将第二个参数声明为可选?templateinlinevoidDelete(T*&MemoryToFree,T*&MemoryToFree2=){deleteMemoryToFree;MemoryToFree=NULL;deleteMemoryToFree2;MemoryToFree2=NULL;}我在=运算符之后尝试了几种方法,例如NULL、(T*)NULL等。这可以做到吗?编译器让我这样做的唯一方法是使用重载...templateinlinevoidDelete(T*&MemoryToFree,T2*&MemoryToFree2){deleteMemoryToFree;Memor

【JavaScript】JS实用案例分享:输入智能提示 | 打字机输出效果

CSDN话题挑战赛第2期参赛话题:学习笔记🖥️NodeJS专栏:Node.js从入门到精通🖥️博主的前端之路(源创征文一等奖作品):前端之行,任重道远(来自大三学长的万字自述)🖥️TypeScript知识总结:TypeScript从入门到精通(十万字超详细知识点总结)🧑‍💼个人简介:大三学生,一个不甘平庸的平凡人🍬👉你的一键三连是我更新的最大动力❤️!🏆分享博主自用牛客网🏆:一个非常全面的面试刷题求职网站,点击跳转🍬文章目录前言1、输入智能提示效果演示案例需求JavaScript实现2、打字机输出效果演示案例需求JavaScript实现结语前言最近博主一直在牛客网刷题巩固基础知识,牛客网不仅具

c++ - 使用指针交换值

我有这段代码inti=5;intk=7;int*iPtr;int*jPtr;int*kPtr;iPtr=&i;kPtr=&k;我需要使用指针交换i和k。我就是这样做的:*jPtr=*kPtr;*kPtr=*iPtr;*iPtr=*jPtr;这是最好的方法,还是有更好的方法? 最佳答案 在我看来,在C++中做到这一点的最佳方法是使用std::iter_swap():#include//...int*iPtr=&i,*kPtr=&k;std::iter_swap(iPtr,kPtr);您可能认为这是一种矫枉过正,但如果您包括我会不同意反

c++ - C/C++ 指针,ptr+1 = ptr +1 byte 还是 ptr+1*sizeof(pointer_type)?

有any_type*ptr=(any_type*)malloc(sizeof(any_type)*size);my_ptr=ptr+1;memcpy(dst,my_ptr,sizeof(any_type));my_ptr会指向ptr之后的1个字节,还是指向ptr之后的sizeof(any_type)字节?对齐选项如何影响答案?有符号/无符号类型是否不同? 最佳答案 指针运算是在指针的静态类型[*]的大小上进行的,所以它会有效地添加sizeof*ptr。成员的对齐方式将作为类型的对齐方式(对象末尾的填充)考虑到对象的大小。struct

c++ - 当我们分配一个指针为 NULL 时会发生什么?

我有一个指向一些数据的指针。现在我已经创建了一个类似的指针。现在这个新指针被分配给旧指针。如果我删除旧的会发生什么?A*a=newA();A*b=a;a=NULL;“a”和“b”会发生什么?此外,如果我做以下事情:A*a=newA();A*b=a;deletea;而且我还想知道当我们赋值为NULL时指针会发生什么。A*a=newA();a=NULL;a仍然指向一些内存还是什么都不指向? 最佳答案 A*a=newA();A*b=a;a=NULL;在此之后,b仍然指向第一行分配的对象。a现在什么都不指向了。您仍然可以通过b指针“使用”该

c++ - 将指针设置为 NULL 会影响您指向的原始项目吗?

我有一个指向链表中节点的指针:structnode*temp=head.next如果我将此指针设置为NULL,例如:temp=NULL;这也会影响我指向的节点吗?即head.next现在是NULL? 最佳答案 这也会影响我指向的节点吗?即head.next现在为NULL?没有。这样想。head.next是一个保存值(地址)的变量。当你这样做时structnode*temp=head.next现在temp也与head.next具有相同的值。稍后当您更改temp的值时,为什么head.next所持有的值要更改。这是当您复制变量的值(在这

c++ - 如何获取指针数组中的元素数?

如何获取指针数组中的元素个数?下面是我的代码:structmystruct{inta;charch[10];intc;};mystruct*m_arr[2];我在其他一些文件中遍历这个数组。我不想在每个文件中硬编码为2,而是希望以编程方式获取数组中的元素数。 最佳答案 不要使用原始数组。使用标准容器,如std::vector或std::array。这两个都有一个.size()成员,并允许基于范围的for语法:for(mystruct*p:m_arr)如果您需要C兼容性,它们都提供了一个data()成员函数,该函数返回指向底层数组中第

c++ - 如何在 C++ 中转换指针

voidfoo(void**Pointer);intmain(){int*IntPtr;foo(&((void*)IntPtr));}为什么会出现错误?error:lvaluerequiredasunary‘&’operand谢谢 最佳答案 voidfoo(void**Pointer);intmain(){int*IntPtr;foo((void**)&IntPtr);} 关于c++-如何在C++中转换指针,我们在StackOverflow上找到一个类似的问题:

c++ - auto_ptr 内容的三元运算符不起作用

我将auto_ptr初始化为NULL,稍后在游戏中我需要知道它是否为NULL以返回它或一个新拷贝。我试过了auto_ptrret=(mReqContext.get()!=0)?mReqContext:newRequestContext();还有其他几个类似的东西转换等等,但是g++试图调用auto_ptrs不存在的运算符?(三元运算符)而不是使用RequestContext*进行三元比较。即使我施放它也不起作用。有什么提示吗?编辑不相等的相等 最佳答案 我想情况类似于以下情况:#include#includeintmain(){st

c++ - 指针的作用域?

好的,所以我确实找到了一些几乎相似的问题,但实际上它们让我对指针更加困惑。C++PointerObjectsvs.NonPointerObjects在上面的链接中,他们说如果你声明一个指针,它实际上是保存在堆上而不是栈上,不管它是在哪里声明的。这是真的??还是我理解错了???我认为无论是指针还是非指针,如果它是一个全局变量,它与应用程序一样存在。如果它是局部变量或在循环或函数中声明,则它的生命周期仅与其中的代码一样长。 最佳答案 变量本身存储在栈或DATA段,但是用new分配后它指向的内存在堆内。