Smart pointers in container like std::vector?

后端 未结 5 2007
你的背包
你的背包 2020-12-05 11:02

I am learning about smart pointers (std::auto_ptr) and just read here and here that smart pointers (std::auto_ptr) should not be put in containers

5条回答
  •  青春惊慌失措
    2020-12-05 11:34

    Yes, you really can't use std::auto_ptr with standard containers. std::auto_ptr copies aren't equivalent, and because standard containers (and algorithms) are allowed to copy their elements at will this screws things up. That is, the operation of copying a std::auto_ptr has a meaning other than a mere copy of an object: it means transferring an ownership.

    Your options are:

    1. Use the Boost Smart Pointers library. This is arguably your best option.
    2. Use primitive pointers. This is fast and safe, so long as you manage the pointers properly. At times this can be complex or difficult. For example, you'll have to cope with (avoid) double-delete issues on your own.
    3. Use your own reference-counting smart pointer. That'd be silly; use a Boost Smart Pointer.

提交回复
热议问题