gpt4 book ai didi

c++ - 为什么 c++ 使用 CustomClass** 而不是 CustomClass* 来创建返回 CustomClass 指针列表的函数?

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

所以我正在学习 C++ 的基础知识并且我有这个自定义类

class DataBook{
private:
vector<PersonData> dataList;
PersonData* numList[10];
PersonData* nameList[10];
public:
PersonData** getNumList(){
return this->numList;
}

我只是无法理解为什么我们使用 PersonData** 而不是 PersonData*。我知道它应该是 PersonData** 因为错误报告是这么说的。但我无法理解这个原因背后的逻辑。谢谢!

最佳答案

当您传递(或返回)一个数组时,实际传递的是一个指向该数组第一个元素的指针。

而且,因为你有一个 PersonData* 的数组元素,指向 that 数组第一个元素的指针是 PersonData** 类型.

这应该有望回答您的直接问题。


但是,我也想借此机会警告您要成为一名 C+ 程序员,那种似乎用 C++ 编写 C 代码的奇怪品种:-)

尽管 C++ 最初基于 C,但人们常说(好吧,说了很多)最难的人向 C 开发人员教授 C++。

如果有人想成为 C++ 开发人员,他们应该尝试完全接受 C++“心态”,包括考虑以下与您的代码相关的要点:

  • 如果您传递的指针总是指向实际项目(而不是可能是 NULL/nullptr ),那么您几乎可以肯定做错了。这就是创建引用的全部原因,我渴望将它们引入 C 的日子,即使只是为了在函数调用中进行引用传递。

  • 如果您将数据隐藏在类的私有(private)部分后面,那么使用公共(public) API 将其暴露给任意修改可能不是一个的主意。您尝试保护 numList当我可以做 auto x = obj.GetNumList(); x[0] = nullptr; 时,这是无关紧要的.如果你必须那样做,你应该至少返回一个指向const的指针。明确指出不应修改。

  • 您甚至应该考虑用 std::vector 替换您的基本级数组或 std::array因为这两者都提供了防止修改超出范围的元素的保护措施,并且还通过对象传递大小信息,这是原始指针无法获得的。

关于c++ - 为什么 c++ 使用 CustomClass** 而不是 CustomClass* 来创建返回 CustomClass 指针列表的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50206262/

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