C ++在STL容器中使用智能指针

时间:2014-10-22 17:40:18

标签: c++ stl smart-pointers

在STL容器(向量,地图等)中使用智能指针有什么好处?知道这些容器已经管理了内存?

示例:

std::vector<std::unique_ptr<int>>

而不是

std::vector<int*>

2 个答案:

答案 0 :(得分:5)

如果对象是指针,则管理指针所占用的内存是不够的。您还需要管理指针指向的内容。最好存储指向的对象而不是指针(如果您的示例std::vector<int>是合适的话),但是,如果您有多变的对象是不可能的。

答案 1 :(得分:0)

当您需要保存对象的引用数组时,可以使用它。这样我就可以对引用数组进行排序,而无需在内存中实际移动对象。

#include <algorithm>
#include <iostream>
#include <memory>
#include <vector>

int main()
{
        std::shared_ptr<int> foo(new int(3));
        std::shared_ptr<int> baz(new int(5));
        std::vector<std::shared_ptr<int> > bar;
        bar.push_back(baz);
        bar.push_back(foo);

        std::sort(bar.begin(), bar.end(), [](std::shared_ptr<int> a, std::shared_ptr<int> b)
        {
                return *a < *b;
        });

        for(int i = 0; i < bar.size(); ++i)
                std::cout << *bar[i] << std::endl;

        return 0;
}

打印:

3
5