如何在 C++ 运行时创建未知数量的对象,我正在从文本文件中读取数据,不想浪费任何内存,即没有额外的对象,这必须在函数中完成。
Player* g_data()
{
system("cls");
char name[40];int level;
fstream file;
file.open("data.txt",ios::app|ios::in|ios::out);
Player data[40],*ptr[100];
int i=0;
while(!file.eof()&&i<100)
{
file >>name>>level;
strcpy(data[i].name,name);
data[i].level=level;
data[i].id=i;
ptr[i]=&data[i];
cout<<"Address-"<<ptr[i]<<"data"<<ptr[i]->name<<"id"<<ptr[i]->id<<endl;
i++;
}
system("pause");
return ptr[i-1];
}
问题是我在返回对象后需要访问内存位置并且我不希望该内存消失(就像堆栈内存的情况一样),现在我如何分配内存并在整个过程中访问内存不浪费任何程序。
最佳答案
创建一个变量std::vector<Player>
内部函数并插入其中,因此您可以在其中保留任意数量的播放器对象指针。您可以在函数结束时返回。
std:vector<Player> g_data()
{
system("cls");
char name[40];int level;
fstream file;
std:vector<Player*> Players;
Player data[40];
int i=0;
while(file.open("data.txt",ios::app|ios::in|ios::out))
{
if ( i ==100)
break;
file >>name>>level;
strcpy(data[i].name,name);
data[i].level=level;
data[i].id=i;
Players.push_back(data);
cout<<"Address-"<<ptr[i]<<"data"<<ptr[i]->name<<"id"<<ptr[i]->id<<endl;
i++;
}
system("pause");
return players;
}
关于C++ 为函数中从文件读取的对象和整个程序可访问的数据分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33863057/