您的位置:首页 > 运维架构 > Linux

读书笔记(Linux c/c++入门与进阶)

2015-09-30 10:36 531 查看
在例子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...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: