这可能是一个愚蠢的问题,但我发现很难理解为什么我们需要再次将指针变量引入类公共成员函数,即使它是在类的私有部分中声明的。
这是我要问的基本代码。
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";
}
编译成功后,命令提示符处出现关闭程序警告。
答案 0 :(得分:0)
好吧,我理解了曲线。
在私有部分中,指针刚刚被声明,并且没有为指针分配内存。所以我们确实为构造函数中的指针分配了内存。
或者,我们也可以直接在私有部分分配内存。
即:
class Human{
private:
std::string *name = new std::string;
int *age = new int;
.....
.....
};
谢谢所有回复的人。