这个虽然会工作,但不是最好的风格。
应该使用std::forward()
另外在设计上,多数时候如果有非平凡基类,那就不适合有移动和拷贝。反过来如果有移动和拷贝,就不适合有继承。
【 在 MyWorkLife (我是谁) 的大作中提到: 】
: 标 题: Re: 为什么调用了基类的拷贝构造函数而不是移动构造函数呢?
: 发信站: 水木社区 (Sat May 30 21:09:17 2020), 站内
:
: Sed(Sed&& sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(move(sd), scale)
:
: 【 在 fangniuwawa (兰州放牛) 的大作中提到: 】
: : 标 题: 为什么调用了基类的拷贝构造函数而不是移动构造函数呢?
: : 发信站: 水木社区 (Sat May 30 20:24:49 2020), 站内
: :
: : include <iostream>
: :
: : template<typename DTTYPE>
: : class Base
: : {
: : public:
: : Base(){};
: :
: : Base(const Base &bt, const DTTYPE &scale = 1.0){std::cout<<"base copy"<<std::endl;}
: :
: : Base(Base &&bt, const DTTYPE &scale = 1.0){std::cout<<"base move"<<std::endl;}
: : };
: :
: : template<typename DTTYPE>
: : class Sed : public Base<DTTYPE>
: : {
: : public:
: : Sed(){};
: : Sed(const Sed &sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(sd, scale) {std::cout<<"copy sed"<<std::endl;}
: : Sed(Sed&& sd, const DTTYPE &scale = 1.0) : Base<DTTYPE>(sd, scale) {std::cout<<"move sed"<<std::endl;}
: : };
: :
: : int main(void)
: : {
: : Sed<double> a;
: : Sed<double> b(std::move(a));
: :
: : return 1;
: : }
: :
: : 运行结果输出: base copy
: : move sed
: :
: : 调用了基类的拷贝构造函数而不是移动构造函数。怎么才能调用基类的移动构造呢?
: :
: : 谢谢!
: : --
: :
: : ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 210.26.112.*]
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 115.34.46.*]
--
FROM 76.126.252.*