首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中 new 一个对象的返回值?该如何处理

2013-12-04 
C++中 new 一个对象的返回值?在《C++ PRIMER》中TextQuery的面向对象实现中,有如下语句:inline Query operat

C++中 new 一个对象的返回值?
在《C++ PRIMER》中TextQuery的面向对象实现中,有如下语句:


inline Query operator&(const Query &lhs, const Query &rhs)
{
   return new AndQuery(lhs, rhs);
}



Q: new AndQuery(lhs, rhs)不是应该返回的是 *AndQuery吗,难道可以隐式的转换到Query类型? c++ primer
[解决办法]
是接受一个对象地址的指针!
[解决办法]
为什么没贴出 AndQuery 的定义
[解决办法]
Query是一个句柄类。
首先Query是Query_base的友元类,而Query_base是一个虚基类,AndQuery继承自BinaryQuery,BinaryQuery继承自Query_base,从而AndQuery的指针和引用可以用Query_base的指针和引用实现多态访问,而Query作为友元,其私有数据包括Query_base的指针,从而实现一个句柄类的框架。
这里new出一个AndQuery的指针,完全可以使用Query_base指针进行多态存储,而Query的句柄意义,就在于用Query对所有继承类的指针进行管理和存储,上述return返回的时候,会隐式调用Query的构造函数,参数是Query_base指针,最后返回。
[解决办法]
是不是类似 Base *p = new Derived
[解决办法]
return new AndQuery(lhs, rhs);
===》Query tmp(new AndQuery(lhs, rhs);)
===> return tmp;
[解决办法]
Query 你可以理解成为一个指针。那么它返回指针没有错。 *p = new Derived 你这样子理解也可以。只是事实上他没有名称的临时对象

热点排行