异常处理之智能指针

    在编程中会分配动态内存,将内存地址赋给一个指针,利用指针来操控内存,并在不需要的时候利用delete释放。如果内存分配之后,还没有来得及释放内存就发生了异常,可能就会造成内存泄露。c++ 提供智能指针来解决之一问题。

auto_ptr的对象存在,它指向的字符串就存在,auto_ptr不存在,会自动销毁它指向的对象,从而避免了内存泄露。所以叫智能指针。

下面用一个程序来说明智能指针是如何使用的:

#include<iostream>
#include<memory>
using namespace std;
class Book
{

public:
	Book(){cout<<"Book 构造函数执行...\n";}
	~Book(){cout<<"Book 析构函数执行...\n";}


};

class X{};
bool quit = false;
void Out()
{

	if(quit == true)
		throw X();
}

void func()
{

	auto_ptr<Book> p (new Book);
	quit = true;
	Out();


}

int main()
{

	try
	{
	
		func();
	
	}

	catch(X)
	{
	
		cout<<"捕获到X异常,开始处理。\n";
	}
	return 0;

}



程序执行的结果如下:


从执行的结果看,调用了Book的析构函数,释放了内存。


下面在上一个程序,继续了解智能指针的用法:


#include<iostream>
using std::cout;
using std::endl;
#include<memory>
using std::auto_ptr;

class Integer
{

public:
	Integer(int i =0):value(i)
	{
		cout<<"constructor for integer: "<<value<<endl;
	

	}
	~Integer()
	{
		cout<<"Destrctor for integer "<<value<<endl;
	
	}

	void setInteger(int i)

	{
	
		value = i;
	}

	int getInteger() const
	{
	
		return value;
	}





private:
	int value;



};

int main()
{

	cout<<"Creating an auto_ptr object that point to an "<<"Integer"<<endl;

	auto_ptr<Integer>ptrToInteger(new Integer(7));

	cout<<"Using the auto_ptr to manipulate the Integer\n";
	ptrToInteger->setInteger(99);
	cout<<"After setInteger:  "<<(*ptrToInteger).getInteger()
		<<"\n\nTerminating program"<<endl;


	return 0;
}


执行的结果如下:

异常处理之智能指针_第1张图片


关于异常处理的就说道这里吧。谢谢


你可能感兴趣的:(编程,c,object,Integer,delete,Class)