如何在c ++中结合`this`和pointer?

Ani*_*mj' 1 c++

我正在学习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但仍想使用指针,我建议至少使用智能指针.


tp1*_*tp1 6

尝试

this->name = new string(name);
this->age = new int(age);
Run Code Online (Sandbox Code Playgroud)

但我建议重命名参数,以便您使用参数或成员变量时不会产生混淆.

  • 现在你遇到了`delete`和内存泄漏的问题. (7认同)
  • 由于OP声称来自Java,并且因为这是C++,所以应该给出一个巨大的警告.该类现在要求实现3的规则:http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three C++没有垃圾收集来释放内存. (2认同)