- 主题:为啥virtual clone(),返回智能指针,不能covariance?
没啥好办法,返回基类的吧
【 在 DoorWay () 的大作中提到: 】
: virtual unique_ptr<Child> Child::Clone() override;
:
: 最近有这种需求,子类提供克隆方法,返回自身类型的智能指针,不行。必须返回基类的智能指针?
:
--
FROM 59.148.127.*
Technically,既然接口是基类的指针,那派生类返回派生类的指针只是一个实现细节,不应体现在接口上。
【 在 DoorWay () 的大作中提到: 】
: 倒不是怕效率损失,工作的项目控制没有这么精细。
: 就是使用的不方便,读起来别扭,或许读的不够多。:-)
:
: 抑或为了形式的美感,一时思维的误区?
--
FROM 59.148.127.*
哦有道理!!
【 在 here080 () 的大作中提到: 】
: 这个问题的核心实质在于此处返回值是有实际物理内存要求的。如果允许子类重写的函数返回不同类型,那有可能该类型的大小跟父类返回类型大小不同。
: 基于这个原因,标准里只有指针和引用才有可能covariance
:
: 除非将unique_ptr作为语言内置功能,否则以类库的身份是不行的。
--
FROM 59.148.127.*
哦!有道理!!
【 在 vonNeumann () 的大作中提到: 】
: 只要标准愿意引入这个特性,大小不相同不是障碍,加一个 covariant return thunk 即可
:
: 这种 thunk 在 C++98 的基类/子类指针的 covariance 情况下已经存在(多继承的情形)
:
--
FROM 59.148.127.*