new delete 指针
2013-09-29 00:47
344 查看
PHP网站交流:45503780
第一部分:
一直对函数返回指针类型以及传递参数指针有颇深的见解,但面试的经历让我不得不针对自己的缺点进行一点点的完善。这就是传说中的笑话。先抄一个例子,写一个类MyClass的赋值运算符函数:
MyClass * function operator =(const MyClass ¶m){//返回的类指针,及常量的参数引用
if(¶m==this)
return this;
delete []m_data;//在类中声明了char * m_data; 的成员变量
m_data=NULL;
m_data=new char[strlen(param.m_data)+1];
strcpy(m_data,param.m_data);//自己多少次写的都是m_data=param_m_data !!!
return *this;
}
可能有很多疑惑,@为什么不返回一个对象,@为什么传递一个常量引用?
先说@1:若返回的是一个对象,则是无法进行 s1=s2=s3的操作的(书上这么说的)。你肯定有试过Class A=B,此时会调用A的构造函数,这么说s1=s2没有问题,在加上赋值运算符的作用,完全可以行的通!若果真这样想,呵呵,你错了,你的=号已经被这个operator=给重载了。这是只有通过指针了。
再说@2:假设传入的不是引用,系统会对param进行复制一个副本,消耗内存资源。同时,将参数定义成常量,将保持传入参数的事例状态。
附加说一下@delete,我们在分配新内存之前要先释放自己的内存空间,否则程序可能会出现内存泄露----这里我其实有很多话说,留到后面。
接下来说返回函数指针时应该注意的一些问题:
返回的指针所指向的数据不能够是函数内声明的变量。函数中的变量存储在栈内存中,函数返回时,系统会自动释放变量的内存,此时指针的地址被释放了。
第二部分:new delete使用
或许困惑自己的只是一个很小的知识点,先缕一下,也许你马上回“了感”。
@new 负责在堆内存中分配指定长度的内存空间,返回地址
@堆的性质就是需要程序员自己释放内存空间
举个例子说明一下,下面我自己写一个例子,可能存在问题,希望能说明问题,如果有错误,大家说出来。
//vector<int> z中的push_back函数;
private int *p=new int[length];//类中存在成员变量length:数组的长度; count当前数组中元素的个数,p表示当前的vector
int push_back(int m){
int *q=NULL;
if(count==length){
length*=2;
q=new int[length];
if(!q){
return ;
}
for(int i=0;i<count;i++){
q++=p++;
}
delete[] p;
q++=m;
count++;
p=q;
}
else{
p++=m;
}
return m;
}
第三部分:new delete的补充
//////
相关文章推荐
- cppTest-3.0:指针相关-3(new&delete)
- 【学习】C++(1) 指针 new 和delete
- 8章3节分配删除指针new和delete
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- 一维静态指针和一维new分配的动态指针,均不可以delete.
- c++,new,delete,成员指针
- 指针和动态数组 new ,delete
- 如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- C++中指针的new和delete
- 一级二级指针new、delete、malloc、free
- 指针和整数,指针和数组,new和delete,cstring和string
- new、delete 与指针
- Effective STL 第7条:如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
- 字符串排序;指针的指针运用;new 与 delete
- C++悬挂指针: new与delete的一些理解
- 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针
- 指针_引用_内存管理new_delete
- C++ 学习笔记(12)动态内存、智能指针、new和delete、动态数组、allocator
- 指针⑶,new和delete
- 指针和自由存储空间复习(重点复习new和delete)