返回指向类成员的指针 - 我应该避免它

Returning pointer to class member - should I avoid it?

本文关键字:我应该 指针 成员 返回      更新时间:2023-10-16

我没有编程经验,所以我想问问你的意见。例如,我有 3 个类:

class A
{
public:
   A(int size);
   int getSize();
private:
   int size_;
};
class B
{
public:
   A* getChild(int childNumber);
   int getNChildren()
   {
      return children.size();
   }
private:
   std::vector<A> children;
};
class C
{
public:
   void sumSize()
   {
       int sum = 0;
       for(int i = 0; i < member.getNChildren(); i++)
       {
            sum += member.getChild(i)->getSize(); // here I wonder if this is good style
       }
   }
private:
  B member;
};

这是一种不好的做法吗?我知道我可以在类 B 中使用方法 sumSize() 并返回此总和,但我可以用这种方式这样做,或者在更大的程序中会有并发症吗?所以这是我的主要问题:

  1. 我是否应该避免返回指向成员的指针:A* getChild(int childNumber);
  2. 所有涉及儿童的东西都应该是计算的 在B类?
我相信

您正在描述一种容器设计模式,该模式备受尊重且有用。 作为设计者,如果您决定成员函数是公共的,那么您打算让"外部世界"访问它们,而该决定取决于您要完成的内容。

也许你不希望外界修改这个成员,所以也许const A* getChild(int childNumber)可能是你想要的。

设计时考虑"常量"是一个好习惯,示例中的所有三个公共成员函数都可以是常量(例如int getSize() const),而不会影响您演示的功能。

这里的一个错误是使用operator作为私人数据成员的名称。 operator 是 C++ 中的保留关键字。