【发布时间】:2019-06-07 19:49:14
【问题描述】:
我在理解指向类对象的指针向量时遇到问题,我尝试了一个测试代码来尝试理解它,但是每当我输入一个名称并尝试输出它时,它会打印出数字而不是我的实际名称进入。我希望有人可以向我解释这一点,因为我是这些概念的新手。
还有
Pets[0]->print(); dosent 一直打印:
cout << "in main: " << Pets[0] << endl;
打印。
class Pet
{
public:
string name;
Pet(const string&);
string getName() const
{
return name;
}
void setName(const string& Name)
{
name = Name;
}
void print()const;
}
int main()
{
vector<Pet*> Pets;
string names;
int done = NULL;
do
{
{
cout << "Name: ";
cin >> names;
Pets.push_back(new Pet(names));
cin.ignore();
}
cout << "Add another ?" << endl;
cin >> done;
} while (done != 0);
Pets[0]->print();
cout << "in main: " << Pets[0] << endl;
system("pause");
}
Pet::Pet(const string& Name)
{
}
void Pet::print()const
{
cout << "Name: " << name;
}
【问题讨论】:
-
@Yksisarvinen
std::string有一个默认构造函数,它创建一个空字符串,所以这不是 UB。 -
Pets[0]->print();会打印,但会打印一个空字符串。您忘记在类构造函数中初始化name成员,因此它默认初始化为空字符串。 -
@aschepler 你是对的,我的错。
-
请注意,通常您会使用
std::vector<Pet>,即没有指针,并依靠向量为您管理内存。在您的代码中,您有内存泄漏,因为所有newed 也应该是deleted
标签: c++ class object pointers stdvector