我是c ++标准库的新手.我想使用std :: list.我知道如果我自己创建一个列表而不是使用stl,我应该将内存分配给一个新对象,然后将其添加到列表中.
一个C风格的A类清单:
A *ptrA = new A();
ptrA->setElement(value);
ptrA->next = null;
currentPositionMyCstyleList->next = ptrA;
ptrA->prev = currentPositionMyCstyleList;
Run Code Online (Sandbox Code Playgroud)
如果我使用stl,是否有必要"新"一个对象?将push_back()"new"作为一个对象添加到c ++中的std :: list之前?
代码如下正确吗?
A aObj(value);
listA.push_back(aObj); // Will push_back() "new" an object and copy the value of aObject to the object before add it to list
Run Code Online (Sandbox Code Playgroud)
aObj的值是否会在下面的代码中发布:
funcAddToList() {
A aObj(value);
listA.push_back(aObj);
}
funcDispList() {
// display listA // Does the value of aObj still in list?
}
Run Code Online (Sandbox Code Playgroud)
push_back()实际上做了什么?
读完stl_list.h_push_back() ,_ M_insert,_M_create_node后我仍然感到困惑
谢谢你的时间.
如果容器的模板参数是 POD 类型,则push_back为其分配一个新的内存块,并使用传递的值进行初始化。如果模板参数是复杂数据类型 a-ka 类的对象,那么它也会被分配,然后通过复制构造函数调用进行实例化(复制构造函数的参数将是传递给 的参数)push_back。