gpt4 book ai didi

c++ - 多态性是否适用于值?或者在按(基)值返回时使用派生类的 move 构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:00 27 4
gpt4 key购买 nike

我正在构建某种工厂方法,它按以下方式将 DerivedClass 作为 BaseClass 返回:

BaseClass Factory() 
{
return DerivedClass();
}

我说的对吗,BaseClass 的 move 构造函数在我调用该方法时被使用了:

BaseClass object = Factory();

由于我无法使 BaseClass 的 move 构造函数成为 virtual,是否有其他方法可以强制 DerivedClass 的 move 构造函数变为被带走?

Edit1:附加信息 - 我已经考虑过指针。但问题是,我想在 DLL 中导出工厂函数,并且我想让它对用户来说尽可能简单。标准指针可能导致内存泄漏,另一方面,并​​不是每个人都熟悉智能指针。

Edit2:据我了解,真正的问题是:多态性是否也适用于按值返回?
答案是否定的。

最佳答案

我认为你不应该这样做:

BaseClass Factory() 

而是

// You'll need to delete
BaseClass* Factory() {
return new Derived();
}

// You will not need to delete
unique_ptr<BaseClass> Factory() {
// return new Derived();
// As the comments point out: prefer use of make_unique
return std::make_unique<Derived>();
}

否则,你是slicing你的对象。

Polymorphism works only in pointers and references .

关于c++ - 多态性是否适用于值?或者在按(基)值返回时使用派生类的 move 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com