class Queue{node
private:mvc
struct node{函数
string data;指针
struct node * next,*priv;对象
}内存
private:get
struct node * pthread;编译器
}string
当我给struct node 分配一块新内存时编译
struct node * pnew
pnew = (struct node *)malloc(sizeof(struct node));
此时应用pnew指针就会出现段错误,而在编译的时候是没有办法检测出来的。
正确应用是
struct node * pnew
pnew = new node ;
缘由就在于
对象在建立的同时要自动执行构造函数,对象在消亡以前要自动执行析构函数。因为malloc/free是库函数而不是运算符,不在编译器控制权限以内,不可以把执行构造函数和析构函数的任务强加于malloc/free,因此malloc仅仅是分配一块连续内存,而string 仅仅给分配一堆指针的空间是没有意义的,因此在应用的时候会出现段错误。