gpt4 book ai didi

c++ - 返回 const 引用的纯虚方法

转载 作者:行者123 更新时间:2023-11-30 01:41:58 28 4
gpt4 key购买 nike

我有一个抽象类AbstractClass。我所有的派生类都应该有一些 const std::vector 但是......这个字段与派生的 class (与类型)相关联 - 而不是与实例相关联。因此,将其设置为 static 可能会很棒。当然我不能在基类中定义它,我也不能强制在将来可以添加的每个派生类中实现它。

所以我希望定义新派生类的人将其实现为static。 (如果不是,程序应该可以正常工作,但会有不必要的内存占用....)。

所以我有一个返回此变量的纯 vitual 方法:

virtual const std::vector<SomeType>& getVec() const = 0;

我现有的派生类定义为:

class DerivedClass : public AbstractClass
{
public:
const std::vector<SomeType>& getVec() const { return vec; }
private:
static const std::vector<SomeType> Vec;
}

我尽量安全地进行此操作,并且考虑其他程序员添加新的派生类并可能以不同方式实现它的可能性......例如:

 const std::vector<SomeType>& getVec() const { return std::vector<SomeType>{ arg1, arg2}; }

我将返回类型定义为 const reference 因为我想避免复制(以防 Vec 是一个类的成员)...是否可以安全公开这个方法?返回 const reference 有什么危险吗?

最佳答案

Is it ok and safe to public this method?

是的,是的。

Are there any dangers in returning const reference?

没有。


如果另一个开发人员按照您展示的方式实现接口(interface),他们最终会在代码中出现未定义的行为,迟早会失败。

没有任何语言功能可以防止其他人使用您的界面并错误地实现它。

关于c++ - 返回 const 引用的纯虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449198/

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