c++ - 避免 std::list 中的指针

标签 c++ list std

我尽量避免有指针,而不是做

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 吗?

最佳答案

"Can i expect the compiler to optimize away the unnecessary object p?"

也许,也许不是。不过试试这个:

myList.push_back(std::make_pair(a,b));

在适用的情况下使用 r 值时,您通常有更好的优化机会。

但即使它没有被优化掉,也没有理由诉诸于使用指针,尤其是对于这样的小对象(并不是说我会提倡对大对象使用指针)。仅在语义上正确使用指针时才使用指针,这种情况很少见。

关于c++ - 避免 std::list 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7127959/

相关文章:

c++ - 从 C 文件调用 C++ 标准头 (cstdint)

c++ - 如何在 C++ 字符串中填充一个部分?

c++ - 将 BITMAPINFOHEADER 图像数据写入 IDirect3DTexture9

c++ - 目录结构 C++

python - 如何将列表拆分为零值和非零值的子列表

c++ - 使用 std::generate 生成矩阵

C++ 字符串 : [] vs. *

python - 将 map() 与字典一起使用

Python 从字典中的值绘制图表

c++ - std::vector.clear() 是否在每个元素上删除(可用内存)?