关于“指针成员的指针型行为或值型行为”

以下为论坛的讨论:

 

1.1.指针成员采取常规指针型行为.这样的类具有指针的所有缺陷但无需特殊的复制控制.
  比如如果一个有指针的类对象之间需要相互赋值,那么常规的指针型行为会使得指针指向同一个内存区域。

  2.类采取值行为.指针所指的对象是唯一的,由每个类对象独立管理.那么通过拷贝构造函数等,实现其指针独立管理各自对 象。因为每个类都定义了拷贝构造函数,赋值操作符。避免了常规指针型的错误

 

 

2.简单的说,是深拷贝和浅拷贝的问题。
一个对象里面如果有指针数据成员,默认拷贝构造函数会直接让两个指针相等。那么当其中一个对象析构后,另一个对象的指针成员岂不是dangling了

 

3.浅拷贝时,指针拷贝之后,两个指针指向同一个内存空间。(指针型行为)但是本来的目的是需要产生一个不同的内存空间并且将值拷贝进去,并用指针指向此空间(值型行为)。实现的方法需要在这个三个函数中指定。

4.1. 浅拷贝
   int *a = new int[5];
   int *b ;
   b
= a;
   delete a;
   delete b;
//出错,空间已经释放
  2. 深拷贝
   char *c = new char[5];
   char *c1 = new char[sizeof(c)];
   strcpy(c,c1);
   delete c;
   delete c1;

5.指针型行为就是浅拷贝,当调用拷贝构造函数或赋值函数时,新对象的指针成员也会指向原对象指针成员指向的地址,即所有对象中的指针是指向同一块区域的,析构时同样也会一起去释放同一个空间。这样的优点是节省空间,各对象一起管理一块内存,缺点是析构时不写控制代码很容易出现重复释放同一空间的错误。

  值型行为就是深拷贝,当调用拷贝构造函数或赋值函数时,新对象不仅有新的指针,而且会为该指针新开辟一块区域,即所有对象分别管理自己的一块数据。

 

6.大多数C++采用以下三种方法之一来管理指针成员:

  1.指针成员采取常规指针型行为。这样的类具有指针的所有缺陷但无需特殊的复制控制。
  2.类可以实现所谓的“智能指针”行为。指针所指向的对象是共享的,但类能够防止野指针。
  3.类采取值型行为。指针所指向的对象是唯一的。由每个类对象独立管理。

7.C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
  http://www.cnblogs.com/Winston/archive/2008/06/03/1212700.html

你可能感兴趣的:(c,delete)