《深度探索C++对象模型》第五章,一段有关拷贝语义学的文字没看懂,请教各位大虾
《深度探索C++对象模型》P223页有这么一段:
编译器如何能够在Point3d和Vertex的copy assignment operators中压抑Point的copy assignment operators呢?编译器不能够重复传统的consructor解决方案(附上额外的参数)。这是因为,和constructor以及destructor不同的是,“取copy assignment operator地址”的操作是合法的。
背景说明,这里有个假设,有类Point3d和Vertex,都是虚拟继承自类Point。而类Vertex3d则同时继承自Point3d和Vertex。那么显然在Point3d和Vertex的copy assignment operator里都有调用Point的copy assignment operator这个动作,那么在Vertex3d里则会重复把这个动作做3次。为了不这样,编译器必须压抑在Vertex3d里的Point3d和Vertex的constructor不这么做。
我的问题:
我的第一个问题是,这段话里的“传统的constructor解决方案(附上额外的参数)”是什么?我记得这本书里有讲,但不记得在何处了,请知道的朋友告诉俺。
我的第二个问题是,下一句,“取copy assignment operator地址”的操作是合法的,这句话何解?在书中接着举了个例子,用一个函数指针调用Point3d的copy assignment operator,是不是怕程序员进行这种调用,从而会破坏在Vertex3d中对Point3d的copy assignment operator的压抑动作?