gpt4 book ai didi

c++ - 确保返回值不是指针

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

我想确保自己在 GetConnections 方法中返回 connections 的精确拷贝。我将在现有节点之外编辑它,如果我的程序返回指向内存位置的指针(因此编辑节点的 vector ),我的程序很可能会停止运行。我如何确保自己返回的是克隆/拷贝而不是指针?

std :: vector<NodeConnection*> Node :: GetConnections()
{
return this->connections;
}


class Node {
private:
std :: vector <NodeConnection*> connections;
public:
// getters
std :: vector <NodeConnection*> GetConnections();
};

vector 本身中的 NodeConnection* 不会被编辑,所以这不是这里的问题。

最佳答案

您可以通过查看函数签名来判断返回的内容:

  1. SomeType* functionName(ArgType arg) - 函数返回一个指针。调用者可以修改指针指向的任何内容。
  2. SomeType const * functionName(ArgType arg) - 函数返回指向 const 的指针。无论指针指向什么,都可以检查,但不能由调用者修改。
  3. SomeType& functionName(ArgType arg) - 函数返回一个引用。调用者可以修改引用所引用的内容。
  4. const SomeType& functionName(ArgType arg) - 函数返回一个 const 引用。可以检查引用所引用的内容,但不能由调用者修改。
  5. SomeType functionName(ArgType arg) - 函数返回一个拷贝。调用者对返回值所做的任何修改都不会反射(reflect)在返回的原始值上。

您的函数的返回类型是第五种类型 - 您按值返回,即您的代码复制了指针 vector 。应该注意的是,尽管调用者不能在您的类中修改 vector ,但他们当然可以在 vector 元素指向的对象上调用方法。如果其中一些方法对项目进行了更改,则原始 vector 中的项目也会看到这些更改。换句话说,当您复制一个指针 vector 时,您得到的是一个拷贝。

另请注意,如果您只想防止修改,则不必返回拷贝:返回指向 const 的指针或 const 引用将获得相同的结果效率更高,因为可以避免复制。

关于c++ - 确保返回值不是指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19467175/

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