我尽量避免使用指针,而不是做
std::list<std::pair<int,int>* > myList;
void addElement(int a, int b) {
myList.push_back(new std::pair<int,int>(a,b));
}
Run Code Online (Sandbox Code Playgroud)
我想我可以做点什么
std::list<std::pair<int,int> > myList;
void addElement(int a, int b) {
std::pair<int,int> p(a,b);
myList.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的行为,这应该存储该对的副本,并在执行时自动删除它myList.clear()(而不是指针).
这是最好的方法吗?我可以期望编译器优化掉不必要的对象p吗?
"我能指望编译器优化掉不必要的对象p吗?"
也许,也许不是.试试这个:
myList.push_back(std::make_pair(a,b));
Run Code Online (Sandbox Code Playgroud)
在适用的情况下使用r值时,通常有更好的优化机会.
但即使它没有被优化掉,也没有理由使用指针,特别是对于这样的小对象(不是我主张使用指针来处理大对象).只有在语义上使用指针时才使用指针,这种情况很少见.
在C++ 0x中,您可以使用std::list::emplace_back,它使用完美转发将参数传递给对象构造函数,从而创建std::pair就地.但否则没有; 它需要创建一个临时的.