今天看C++ Primer中的智能指针(421-424页)。
有个问题一直想不通,如下:
首先指针是从外部送入类的内部,若类在析构的时候,其智能指针的计数器为0,就会释放该指针的内存,
也就是说这个指针是在类的外部分配的内存,但却在类的内部释放。这不是很奇怪吗,不符合谁分配谁释放的原则啊。
比如下面这段代码。
int *ip = new int(42);
HasPtr p1(ip); //HasPtr是一个带有智能指针的类
用户为指针ip分配了内存,然后把ip送入HasPtr的对象p1, 当p1析构的时候,就会释放ip的内存。但是使用HasPtr类的用户未必知道ip的内存已经被释放了,所以他可能会这样写代码
int *ip = new int(42);
HasPtr p1(ip);
delete ip;
这不就导致ip被重复释放了吗?
还有一个问题,如果传入类中的地址不是new出来的,类内部却会释放该地址的内存,不就出错了吗?比如下面这段代码
int i = 42;
HasPtr p1(&i);
p1在析构的时候释放i的地址所指向的内存,不就出错了吗