gpt4 book ai didi

c++ - 有什么办法可以帮助代码返回值是 const 引用吗?

转载 作者:行者123 更新时间:2023-12-02 09:51:56 25 4
gpt4 key购买 nike

假设我有一个类(class) A , 类是可复制的,但是复制它会花费很多。
假设我有一个类(class) B ,它可以返回 A 的常量引用.

class B
{
public:
...
const A& obtainA() const
{
return a;
}

private:
A a;
};
当我想从 B 中使用 A 时,我认为最佳做法是通过 const 引用在 B 中访问 A
B b;
const A& a = b.obtainA(); // do not needs to the heavy copy operation of A, good.
但是,我总是忘记 const 引用,我的代码如下所示。
B b;
A a = b.obtainA(); // leads to the heavy copy operation of A, not good
它不仅导致繁重的复制操作,而且不安全。
如果 a误调用非const成员函数,会导致成员 a在 b 被改出类。
有什么方法可以帮助我返回 const 引用吗?
我想要类似的东西,如果不是通过引用返回,则无法编译代码。
或者任何其他建议都可以。
谢谢你的时间。
具体应用 A在我的应用程序中是 shared array .存储在数组中的数据是共享的,就像 std::shared_ptr ,但管理对象数组而不是单个对象。
该数组被设计为可以共享以减少复制开销。 A是可复制的,因为数组应该是可复制的。
数组是一个广泛使用的类,因此它通常是数组用户的成员,即 B。在这个问题中。

最佳答案

您可以制作 A不可复制,并提供一种显式复制的方法。

class A {
private:
A(A const &); // expensive copy
public:
A make_copy() { return *this; }
};
make_copy方法将创建昂贵的拷贝,但其他代码将无法隐式创建拷贝,因为拷贝构造函数是私有(private)的。

关于c++ - 有什么办法可以帮助代码返回值是 const 引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63902996/

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