最近用到vector中存储结构体:
经过查看C++ primer ,向vector中push_back需要调用拷贝构造函数,所以,结构图需要实现构造函数和拷贝构造函数。
struct sProc
{
// 进程ID
int pid;
// 进程状态
int stat;
// 状态为0次数
int count;
char *path;
sProc()
{
pid = -1;
stat = 0;
count = 0;
path = NULL; //关键在此出
}
};
声明一个vector如下:
vector<sProc*> list;
sProc* p = new sProc;
在非调试模式下调用list.push_back(p);出现内存不可读的错误。折腾了半天,才发现,vector在构造时,不会给指针类型成员分配空间。把结构体修改一下就可以了:
struct sProc
{
// 进程ID
int pid;
// 进程状态
int stat;
// 状态为0次数
int count;
char *path;
sProc()
{
pid = -1;
stat = 0;
count = 0;
path = new char[41]; //关键在此出
}
};
经过查看C++ primer ,向vector中push_back需要调用拷贝构造函数,所以,结构图需要实现构造函数和拷贝构造函数。