浅拷贝会造成指针悬挂的问题。

 举个例子:两个对象是s1和s2的指针_str都指向new开辟的同一块空间,如下图,主程序结束时,对象逐个撤销,先撤销对象s2,会调用析构函数释放动态分配的内存;再撤销对象s1时,s1._str所指向的内存空间已经是无法访问了,而s2._str原先指向的那块内存却无法释放,出现了所谓的指针悬挂! 两个对象企图释放同一块内存,从而导致一块内存被释放两次这也是不行的,运行会出错。

浅析:浅拷贝 及 深拷贝的传统写法浅析:浅拷贝 及 深拷贝的传统写法

浅析:浅拷贝 及 深拷贝的传统写法
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class String
 5 {
 6 public:
 7            String(char *str)
 8                     :_str(new char [strlen(str )+1])
 9            {
10                               strcpy(_str, str);
11            }
12            String(const String & s)
13            {
14                     _str = s._str;
15            }
16            String& operator=(const String & s )
17            {
18                     if (this !=&s)
19                     {
20                               _str = s._str;
21                     }
22                     return *this ;
23            }
24            ~String()
25            {
26                     delete[] _str;
27            }
28 private:
29            char* _str;
30 };
31 
32 void Test()
33 {
34            String s1("Lynn" );
35            String s2=s1;
36 }
37 int main()
38 {
39            Test();
40            system("pause" );
41            return 0;
42 }
浅拷贝

相关文章:

  • 2021-08-05
  • 2021-10-30
猜你喜欢
  • 2021-10-06
  • 2021-07-16
  • 2021-09-15
  • 2021-04-07
  • 2022-01-09
  • 2021-08-29
相关资源
相似解决方案