哪个更好:存储对象vs存储指针?

这个问题在这里已经有了答案:

  • 为什么我应该使用指针而不是对象本身? 22个答案

  • 这取决于你如何使用你的商店。 存储对象意味着在调用Add时以及复制存储时(以及其他情况),您将复制这些对象:这可能会带来成本,并且可能导致不需要的行为。

    指针可能是一个很好的选择,但是你应该更喜欢托管指针,比如std::unique_ptr ,所以你不必处理删除操作。

    版本C:

    auto e = std::unique_ptr<E>(new E());
    store.Add(e); //This time the store contains managed pointers.
    

    如果您有C ++ 14可用,您也可以使用std::make_unique

    版本C之二:

    auto e = std::make_unique<E>();
    store.Add(e); //This time the store contains managed pointers.
    

    如果您需要共享指向对象的另一个选项可以使用std::shared_ptr ,但仅在需要时才使用它。

    版本D:

    auto e = std::make_shared<E>();
    store.Add(e); //This time the store contains shared managed pointers.
    

    随着c ++ 11的继续,你也可以直接在容器中构建它们:

    std::vector<Widget> widgets;
    widgets.emplace_back(/*Parameters to construct a widget*/);
    

    哪个更好?为什么?

    这取决于你的应用程序。 如果容器应该拥有这些对象,并且它们不太复制,那么值语义更容易。 如果它们广泛地复制,但很容易移动,标准容器将会移动它们(您当然必须提供移动构造函数)。

    您也可以通过存储智能指针来获得两全其美的效果。 这样你就会得到多态,如果这是一个要求。

    std::vector<std::unique_ptr<Widget>> widgets;
    widgets.push_back(std::make_unique<Widget>(/*Parameters to construct a widget*/));
    

    哪些会导致更多的错误,哪些更有效?

    第一个问题完全取决于你作为程序员的技能,而第二个问题不能用一揽子语句来回答。 程序需要进行基准测试并进行效率分析。

    链接地址: http://www.djcxy.com/p/31641.html

    上一篇: Which is better: storing objects vs storing pointers?

    下一篇: What is the benefit of using a pointer C++