【发布时间】:2010-10-13 15:34:13
【问题描述】:
我正在使用 C++。 C++0x 使用 Visual Studio 2010 是正确的。
假设我有一个类 Z。为了让我的应用程序更安全地使用指向该类的指针,我可以始终使用智能指针(共享指针、弱指针)。
现在这个类 Z 继承自一个类 X。我的应用程序的某些部分将使用指向类 X 的指针,其他部分将使用指向类 Z 的指针。
- 我还能使用智能指针吗?
- 如果我有一些指向 X 和其他指向 Z 的共享指针仍然有效吗?是否保证销毁最后一个指向实例的共享指针(不管是
std::shared_ptr<X>还是std::shared_ptr<Z>)会删除实例?我确定如果我删除std::shared_ptr<X>,只要有另一个std::shared_ptr<Y>,实例就会保留?
现在假设我使用多重继承,其中 Z 继承自类 X 和 Y。
我的应用程序的某些部分可以使用std::shared_ptr<X>,其他部分可以使用std::shared_ptr<Y>,其他部分可以使用std::shared_ptr<Z>。
- 我还能这样使用共享指针吗?
- 是否仍然保证只有最后一个智能指针(无论它指向 X、Y 还是 Z)删除实例?
顺便说一句,我怎样才能安全地将一个智能指针转换为另一个,例如将std::shared_ptr<Z> 转换为std::shared_ptr<X>?这行得通吗?这允许吗?
请注意,我明确引用了非侵入式指针(如 C++0x 中的新 std::shared_ptr 和 std::weak_ptr)。当使用侵入式指针时(如在 Boost 中),它可能会起作用,因为实例本身负责保持计数器。
【问题讨论】:
标签: visual-studio-2010 c++11 smart-pointers