c++指针在哪里创建就在那里释放

c++指针在哪里创建就在那里释放,只要再堆中创建的一块内存空间,就会返回一个指向该内存空间的指针,我们一定不要弄丢该指针,假如该指针丢失了,那么该堆中的空间就会成为一块不可访问的区域,也就是程序员们经常说的内存泄露了。

同样假如我们将存储在堆中的对象初始化给一个引用,那么当该对象被删除时,这个引用也就成了空引用了,假如我们再次使用这个空引用的时候,就会令程序出错,但是程序没有报错。

假如我们无法确定指向堆中对象的指针是哪一个,是func()函数的p指针,或者忘记删除指针。为避免指针混淆,我们就要做到c++指针在哪里创建就在那里释放。因此我们在面函数中创建一个堆中对象,然后按引用的方式传递到func()函数中,在func()函数中对该对象的操作完毕后返回该对象,然后再main函数中释放该对象,这样就实现了在main函数中创建,在main函数中释放。

#include <iostream>
using namespace std;
class A
{
public :
A(int i){cout<<”执行构造函数创建一个对象\n”;x=i;}
A(A&a){x=a.x;cout<<”执行复制构造函数创建一个对象\n”;}
~A(){cout<<”执行析构函数!\n”;}
int get(){return x;}
void set(int i){x=i;}
private:
int x;
};

A &func(A&a)//按别名返回
{
cout<<”跳转到func函数中!\n”;
a.set(66);
return a;//返回对象别名
}

int main(){
A *p=new A(99);//创建堆中对象
func(*p);
cout<<p->get()<<endl;
delete p;//c++指针在哪里创建就在哪里删除
return 0;
} 本文链接地址: c++指针在哪里创建就在那里释放