C ++私有指针“泄漏”?

时间:2010-04-12 21:52:48

标签: c++ memory-leaks pointers

我将创建一个类来保存一系列将传递给函数的参数。让我们使用这个更短的例子:

class ParamList{

public:
    ParamList(string& a_string);
    string& getString(); //returns my_string
private:
    string& my_string;
}

我的问题是:my_string是私有的,但我正在返回对它的引用。是不是在C ++中称为私有指针泄漏?这不是很好的编程习惯吗?我希望getString的调用者能够获取引用并修改它。

请告诉我。

谢谢, JBU

edit1:调用者将使用getString()并修改返回的字符串。

2 个答案:

答案 0 :(得分:3)

只要符合以下条件,撤销私人参考就完全可以了:

一个。这是一个const引用,您已记录该引用何时可以无效或者为何 B.该参考意图进行修改(即std::vector<T>::operator[]

虽然有一些有用的案例可以返回非const引用,但通常应该避免使用它。 Scott Meyers' Effective C++(第3版,第28项)中对此进行了介绍:如果您想看看,请避免将“句柄”返回到对象内部。

答案 1 :(得分:2)

首先,你需要决定ParamList是拥有字符串还是只是“了解它”。使用string& my_string编写它的方式意味着它只能处理其他人的字符串。在这种情况下,由于ParamList首先不拥有它,因此某些人修改字符串不是(很多)问题!

如果您希望ParamList拥有参数的完整主副本(取决于您尝试解决的问题),请执行以下操作:

class ParamList{

public:
    ParamList(const string& a_string); // do a strcpy in here.

    const string& getString(); //returns my_string
    void setString(const string& new_string); //do a strcpy here too.
private:
    string my_string;
}

请注意,最好不要使用set和get函数而不是返回非const引用,这样ParamList可以更好地控制其成员的修改方式。