C++ 返回指向私有成员的指针或引用的替代方法

C++ 返回指向私有成员的指针或引用的替代方法,c++,C++,我经常看到人们向私人成员返回指针或引用,我被告知这是一种不好的做法(我自己也为此感到内疚)。什么样的糟糕设计决策会导致这种情况,如果有的话,还有什么安全的替代方案?只有当引用是可变的时,才将引用返回给私有成员是一个坏主意。这带来了一个问题,因为调用方获得了修改对象状态的方法,绕过了您可能进行的任何一致性检查 尽管返回const引用不会使您面临相同的问题,但仍然不理想,因为您返回的对象的生存期由您的对象控制。如果在调用者仍有对该成员的引用时决定取消分配该成员,则可能会导致调用者中出现未定义的行为

我经常看到人们向私人成员返回指针或引用,我被告知这是一种不好的做法(我自己也为此感到内疚)。什么样的糟糕设计决策会导致这种情况,如果有的话,还有什么安全的替代方案?

只有当引用是可变的时,才将引用返回给私有成员是一个坏主意。这带来了一个问题,因为调用方获得了修改对象状态的方法,绕过了您可能进行的任何一致性检查

尽管返回
const
引用不会使您面临相同的问题,但仍然不理想,因为您返回的对象的生存期由您的对象控制。如果在调用者仍有对该成员的引用时决定取消分配该成员,则可能会导致调用者中出现未定义的行为


返回引用的可行替代方法是返回副本。这对于较小的对象相当有效,但对于较大的对象仍然存在问题。您可以返回一个
const
引用,并清楚地解释它的生存期,或者返回一个智能指针。

仅当引用是可变的时,才返回对私有成员的引用是一个坏主意。这带来了一个问题,因为调用方获得了修改对象状态的方法,绕过了您可能进行的任何一致性检查

尽管返回
const
引用不会使您面临相同的问题,但仍然不理想,因为您返回的对象的生存期由您的对象控制。如果在调用者仍有对该成员的引用时决定取消分配该成员,则可能会导致调用者中出现未定义的行为


返回引用的可行替代方法是返回副本。这对于较小的对象相当有效,但对于较大的对象仍然存在问题。您可以返回一个
const
引用,并清楚地解释它的生存期,或者返回一个智能指针。

这并不总是一个坏习惯。例如,许多容器都有返回内部指针/引用的方法。这实际上取决于具体情况和所讨论的特定代码。我认为这个问题太宽泛了,没有一个具体的例子你想讨论。你指的是
const
references吗?或者可变引用?可能返回副本?好吧,一个安全的选择(假设这样做一开始是不安全的)是不返回指向私有成员的指针或引用。你的问题太模糊了,“我经常看到人们返回指向私有成员的指针或引用,我被告知这是一种不好的做法”如果你认为是谁告诉你的意思和你暗示的一样广泛,那么建议从他们那里找到进一步的解释,如果他们真的这么广泛,那么我建议你忽略他们关于“坏习惯”的概念。这并不总是坏习惯。例如,许多容器都有返回内部指针/引用的方法。这实际上取决于具体情况和所讨论的特定代码。我认为这个问题太宽泛了,没有一个具体的例子你想讨论。你指的是
const
references吗?或者可变引用?可能返回副本?好吧,一个安全的选择(假设这样做一开始是不安全的)是不返回指向私有成员的指针或引用。你的问题太模糊了,“我经常看到人们返回指向私有成员的指针或引用,我被告知这是一种不好的做法”如果你认为是谁告诉你的意思和你暗示的一样广泛,那么建议从他们那里找到进一步的解释,如果他们真的这么广泛,那么我建议你忽略他们的“坏习惯”概念。