【发布时间】:2011-10-30 23:23:19
【问题描述】:
我尽量避免使用指针,而不是这样做
std::list<std::pair<int,int>* > myList;
void addElement(int a, int b) {
myList.push_back(new std::pair<int,int>(a,b));
}
我想我可以做类似的事情
std::list<std::pair<int,int> > myList;
void addElement(int a, int b) {
std::pair<int,int> p(a,b);
myList.push_back(p);
}
如果我正确理解该行为,这应该存储该对的副本,并在执行 myList.clear() 时自动删除它(而不是指针)。
这是最好的方法吗?
我可以期望编译器优化掉不必要的对象p吗?
【问题讨论】:
-
优化与否是否重要(成本将微不足道)。
-
您正在将一个项目添加到列表中,这将导致堆分配,并且会在列表的每次迭代中导致大量缓存未命中 - 您担心复制两个整数?跨度>
-
我担心在我的代码中处理指针,并导致内存泄漏。我要求在实施方面获得一些更有经验的意见,以确保我没有做任何特别愚蠢的事情。我感谢所有 cmets 和回复。