在例子13.30作者谈到A_String和B_String指向同一块内存,当删除B_String,A_String的对应内存就会被删除或者出错,但是实际实验下来并没有删除,操作系统是ubuntu 14.40,当所有指向该内存块的指针都被删除才释放该块内存.
#include <iostream>
#include <cstring>
using namespace std;
class String
{
private:
char * string;
long len;
public:
String(const char *);
void show_string();
};
void String::show_string()
{
cout<<"string:"<<string<<" string address:";
cout<<(void*)string;
cout<<" length:"<<len<<endl;
}
String::String(const char * i_string)
{
len=strlen(i_string);
string=new char [len+1];
strcpy(string,i_string);
}
int main()
{
String A_String("The C++ Bible");
String * B_String=new String("C++ Explained");
A_String=*B_String;
// delete [] B_String;
cout<<"A_String..."<<endl;
A_String.show_string();
cout<<"B_String..."<<endl;
B_String->show_string();
return 0;
}
运行结果:
A_String...
string:C++ Explained string address:0xdb3050 length:13
B_String...
string:C++ Explained string address:0xdb3050 length:13
增加
delete [] B_String;
运行结果:
A_String...
string:C++ Explained string address:0x758050 length:13
B_String...
改成:
delete B_String;
运行结果:
A_String...
string:C++ Explained string address:0x1913050 length:13
B_String...