为什么要再次在类的成员函数中启动指针变量?

问题描述 投票:-2回答:1

这可能是一个愚蠢的问题,但我发现很难理解为什么我们需要再次将指针变量引入类公共成员函数,即使它是在类的私有部分中声明的。

这是我想要问的基本代码。

class Human{
private:
    std::string *name;
    int *age;
public:
    Human(std::string iname, int iage){
        name = new std::string;
        age = new int;

        *name = iname;
        *age = iage;
        std::cout<<"Constructor Called \n \n";
    }

    void display(){
        std::cout<<"My name is "<<*name<<" And my Age is "<<*age<<std::endl<<std::endl;
    }

    ~Human(){
        delete name;
        delete age;
        std::cout<<"Destructor Called \n \n";
    }
};

int main(){
    Human *noor = new Human("Noor", 10);
    noor->display();
    delete noor;
}

使用上面的代码,输出正如预期的那样工作,就像我在Human Constructor上评论指针的动态分配一样。即

Human(std::string iname, int iage){
   // name = new std::string;
   // age = new int;

    *name = iname;
    *age = iage;
    std::cout<<"Constructor Called \n \n";
}

编译成功后,命令提示符处有一个关闭程序警告。

c++ pointers dynamic heap allocation
1个回答
0
投票

好吧,我理解了曲线。

就像在私有部分中一样,指针刚刚被声明,并且没有内存被分配给指针。所以我们确实为构造函数中的指针分配了内存。

或者,我们也可以直接在私有部分分配内存。

即:

class Human{
private:
    std::string *name = new std::string;
    int *age = new int;
    .....
    .....
 };

谢谢所有回复的人。

© www.soinside.com 2019 - 2024. All rights reserved.