void* mem = operator new (sizeof(T));//分配内存
T:T();//初始化
T* p = static_cast<T*> mem;//转型赋值
以下面的链表为例。
#ifndef circleList
#define circleList
typedef struct listNode {
listNode* next;
int data;
listNode(int data,listNode* e):data(data),next(e){}
}listNode,*pNode;
class MyList {
public:
MyList():head(NULL),tail(NULL){}
bool insertHead(int el);
private:
pNode head;
pNode tail;
};
bool MyList::insertHead(int el)//头插法,先new一块空间,再将这块空间初始化
//并next指向head,最后将这块空间赋值给head。
{
//auto p = new listNode(el, head);
//head = p;
head = new listNode(el,head);
if (tail == NULL)
tail = head;
return true;
}
#endif // ! circleList
开始执行new,跳转至初始化,此时p仍未赋值。
对象初始化完成后p被赋值。