《深度探索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的压抑动作?
编译器如何能够在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的压抑动作?
...全文
相关推荐
深度探索c++对象模型(2012版本)
总的来说,《深度探索C++对象模型》将带领读者深入C++的核心,理解对象模型的每一个细节,这对于提升C++编程技能,解决复杂问题和优化代码性能具有极大的价值。
深度探索C++对象模型 PDF
《深度探索C++对象模型》是一本专门为C++程序员量身打造的专业书籍,它深入剖析了C++语言的核心——对象模型。
深度探索C++对象模型读书笔记
### 深度探索C++对象模型读书笔记#### 一、引言在深入探讨C++对象模型之前,我们先来明确一个概念——什么是C++对象模型?
深度探索C++对象模型 超清版
Lippman撰写,侯捷翻译,深入探讨了C++对象模型的内部机制,包括对象构造、数据和函数成员的语意学,以及构造函数、拷贝构造函数、析构函数的行为。同时,书中还详细介绍了模
深度探索C++对象模型 中文pdf 英文chm
本书深入探讨了C++对象模型的内部机制,包括对象布局、构造与解构过程、拷贝语意学等。同时,分析了模板、异常处理等高级特性,以及继承、多态和虚拟函数等关键概念对程序设计的影响。


