我正在学习C++.有一个奇怪的案例,我想知道解决方案.假设代码如下
class HumanBeing {
private:
string *name;
int *age;
HumanBeing(string name, int age) {
// what to do in here?
}
};
Run Code Online (Sandbox Code Playgroud)
在Java中我可以使用this.name = name.但是在C++中我能做到this->name = name(它对上面的例子无效),但是当类变量是一个指针时该怎么办?
我来自Java背景,所以这些(指针)的东西对我来说非常混乱.
nca*_*011 11
我会避免在这个例子中使用指针并重写它像这样:
class HumanBeing {
private:
string name;
int age;
public:
HumanBeing(string name, int age) : name (name), age (age)
{
}
};
Run Code Online (Sandbox Code Playgroud)
上面的示例使用构造函数初始化列表初始化数据成员.
如果您仍然选择使用指针,那么您必须决定如何处理数据的所有权.
如果您的班级将获得数据的所有权,那么您可以执行tp1建议的操作.
如果您的班级不会获得数据的所有权,那么您可以这样做:
HumanBeing(string &name, int &age) : name (&name), age (&age)
{
}
Run Code Online (Sandbox Code Playgroud)
如果你有权访问C++ 11但仍想使用指针,我建议至少使用智能指针.
尝试
this->name = new string(name);
this->age = new int(age);
Run Code Online (Sandbox Code Playgroud)
但我建议重命名参数,以便您使用参数或成员变量时不会产生混淆.