gpt4 book ai didi

C++ getter temporary 与 const 引用

转载 作者:行者123 更新时间:2023-11-30 04:06:04 24 4
gpt4 key购买 nike

我有一些存储 vector 的类。我有 setter/getter

class Data{
private:
std::vector<Point*> points;

public:
inline std::vector<Point*> getPoints(){
return points;
}

}

当我调用 getPoints() 时,它会返回临时对象吗?或者它只会复制它?
或者我应该返回 const 引用?

更新


如果我有另一个保存我的数据的类,它也有一个 getter 怎么办:

class Controller{
private:
Data *data;

public:
inline std::vector<Point*> getPoints(){
return data->getPoints();
}
}

如果我不希望它们被复制,它们都应该是常量引用吗?

最佳答案

您的方法复制。对 vector 本身的修改不会传播到您的类中的。您可以返回一个 const 引用来避免复制。调用者可以根据需要进行复制,但他可以控制。

请注意,返回 vector 时所做的复制是浅的。这意味着会公开各个点:如果调用者对点进行修改(而不是对 vector 进行修改),这些修改将传播到类中 vector 所指向的点。

保护 Point 的内容要困难得多 - 它需要您进行手动复制。它还需要您的调用者进行手动释放。不过,一般来说,您最好使用智能指针(std::unique_ptrstd::shared_ptr)来简化资源管理。

关于C++ getter temporary 与 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23042764/

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