【聚杰网VC】C++/CLI解析之基于堆栈的对象与跟踪引用
拷贝构造函数
在下面的例子中,p6由给定的坐标构造而成,而p7则初始化为p6的一个副本,这就需要Point有一个拷贝构造函数;然而,在默认情况下,编译器不会为这些引用类产生一个拷贝构造函数。那么,在这种情况下,就必须自己编写一个。
| Point p6(3,4), p7 = p6; |
以下,是Point的拷贝构造函数:
| Point(Point% p) { X = p.X; Y = p.Y; } |
而对一个本地类N的拷贝构造函数,一般声明成如下形式:
| N(const N& n); |
但是,对引用类来说,因为%取代了&,所以在CLI的世界中,const显得有点格格不入。
赋值操作符
以下表达式:
| p7 = p6; |
就需要一个赋值操作符,但再次提醒,这不是自动提供的。以下就是一个自定义的操作符例子:
| Point% operator=(Point% p) { X = p.X; Y = p.Y; return *this; } |
之所以没有提供默认的拷贝构造函数或赋值操作符,是因为所有的引用类(除了System::Object),都有一个基类:System:: Object,而这个类并没有提供一个拷贝构造函数或赋值操作符。基本上,这两者默认都会调用它们基类中相应的实现版本,但基类中却一个对应的定义也没有。




