![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
非专业联盟
这个作者很懒,什么都没留下…
展开
-
new 和delete
new的功能可以被拆解为三步: 一是通过调用malloc分配无类型空间(大小为类的大小) 二是进行指针类型转换 三是调用类的构造函数(赋初值之类的操作) delete的功能可以被拆解为两步: 一是调用析构函数 二是调用free delete这里的执行顺序是先析构在free,顺序很重要,否则很有可能会造成内存泄漏: 比如: x=new string; delete x; 如果先调用free,那么直接释放的是x这个指针的所占用的空间,那么x所指向的内容就不能被释放 ,就会造成内存原创 2022-01-26 14:01:43 · 308 阅读 · 0 评论 -
左值和右值引用
左值引用: int a=4; int &b=a;//b是a的别名,所有操作一样。引用变量初始化以后就不能再指向其他别的元素。 右值引用://c++11增加的一个非常量的引用类型,右值指的是临时变量(如函数的返回值),当右值引用初始化以后,临时变量就消失了,右值引用具有临时变量的类型。 类型 && i=被引用的对象; 如: int get(){ int i= 4; return i;} int main(){ int && k =get()+4; //int &原创 2020-09-24 10:16:51 · 80 阅读 · 0 评论 -
内存泄漏。。。
//内存泄露,分配在堆区的动态内存不会自己主动销毁,需要用delete,如果不回收,系统就会浪费很多的资源。 #include using namespace std; int main(){ float *pf = NULL; pf = new float; *pf = 4.321f; float f2= 5.321f; cout<<“pf指向的地址:”<<pf<<endl; cout<<"*pf的值:"<<*pf<<endl; pf原创 2020-09-24 09:53:44 · 90 阅读 · 0 评论 -
内存销毁
#include using namespace std; int *sum(int a ,int b){ int *ps = NULL; int c=a+b; ps =&c; return ps; } int main(){ int *pl= NULL; int k1=3; int k2=5; pl = sum(k1,k2); //pl从sum中获得一个临时指针,该指针是指针ps的临时复制品,操作完成后会消失,它所保留的地址交给了pl; //sum执行完毕以后,该域使用的栈内存会被系统销毁甚至挪用原创 2020-09-24 09:42:24 · 150 阅读 · 0 评论 -
返回值为指针的一些笔记
返回值为指针的一些笔记: #include using namespace std; //函数中返回的是定义中i的地址,函数执行后,i的内存被销毁,值变成了一个随机值 int *pointer(int *p){ int i=9; cout<<“函数体中的i的地址:”<<&i<<endl; cout<<“函数体中i的值:”<<i<<endl; p=&i; return p; } int main(){ int *k = N原创 2020-09-21 20:32:43 · 53 阅读 · 0 评论 -
c++的void指针类型和const的用法
c++空类型的使用; int i = 100; int p =&i; char a=‘b’; char * str=&a; void q=NULL; q=p;//只是将p里面的值赋给q,q的类型还是空类型。 cout<<(int )q<<endl;//要转化类型才能读出我们想要的内容。 q=str; cout<<(char)q<<endl; c++ const的用法 #include using namespace std; int main原创 2020-09-21 10:20:16 · 524 阅读 · 0 评论