我将创建一个类来保存一系列将传递给函数的参数。让我们使用这个更短的例子:
class ParamList{
public:
ParamList(string& a_string);
string& getString(); //returns my_string
private:
string& my_string;
}
我的问题是:my_string是私有的,但我正在返回对它的引用。是不是在C ++中称为私有指针泄漏?这不是很好的编程习惯吗?我希望getString的调用者能够获取引用并修改它。
请告诉我。
谢谢, JBU
edit1:调用者将使用getString()并修改返回的字符串。
答案 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可以更好地控制其成员的修改方式。