函数的返回值是一个对象也没有应用传址技术时
-什么时候有必要用拷贝构造函数?
上述 种情况,如果没有涉及到深拷贝问题,就没有必要自己来编写拷贝构造函数,编译器有默认
的可以很完美的完成任务
还一种情况就是变态的拷贝:在拷内过程中进行缩放,放大等处理,不过没什么用
2)析构函数必须是虚函数吗?为什么?(汉略)
为什么析构函数总是虚函数?如果这是必要的,那么为什么 不把虚析构函数直接作为默认值?为什么纯虚析构函
数可以通过编译,但是不能通过连接?
回答:
编译器总是根据类型来调用类成员函数。但是一个派生类的指针可以安全地转化为一个基类的指针。这样删除一个基
类的指针的时候,不管这个指针指向一个基类对象还是一个派生类的对象,调用的都是基类的析构函数而不是派
生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。
所以建议的方式是将析构函数声明为虚函数。如果你使用 89,并且以 &:; 或其派生类为基类,那么 89 已经
为你做了这件事情;&:; 的析构函数是虚函数。一个函数一旦声明为虚函数,那么不管你是否加上 0<5修饰
符,它在所有派生类中都成为虚函数。但是由于理解明确起见,建议的方式还是加上 0<5修饰符。
不把虚析构函数直接作为默认值的原因是虚函数表的开销以及和 语言的类型的兼容性。有虚函数的对象总是
在开始的位置包含一个隐含的虚函数表指针成员。如果是对于 89 类 =( 和 '> 这样的小型类,增加一个指针
就增加了很多内存占用,而且使得其内存表示和基类 =&?@) 和 '?A 不一致。如果两个类的内存表示一致,那么这样
你可以安全地把一个类的指针或数组当作另一个类的指针或数组使用。
3)你听说过钻石结构吗?请具体说一下(aspenTech)
4)什么是深拷贝?什么是浅拷贝?他们有什么区别?(aspenTech)
如果一个类中含有指针成员变量,则在利用一个已存在对象构造新的对象时,就会面临两种选择:
深拷贝和浅拷贝。
浅拷贝只是将对象间对应的指针成员变量进行简单的拷贝,即拷贝结束后新旧对象的指针指向相
同的资源(指针的值是相同的);这种拷贝会导致对象的成员不可用
深拷贝之后,新旧对象的 #(! 成员指向的内容的值相同,而其自身的值不同。这样就可
避免出现其中之一
(B之后,另一对象的 #(! 成员不可用。