2011-08-18 46 views
2

如果我有一个选项QScopedPointerboost::scoped_ptr,哪一个会做最擅长在以下情况之间进行选择:QScopedPointer Vs的的boost :: scoped_ptr的[选择哪一个]

1. QScopedPointer<QObject> Vs boost::scoped_ptr<QObject> 
2. QScopedPointer<QtContainer> Vs boost::scoped_ptr<QtContainer> 
3. QScopedPointer::data() Vs boost::scoped_ptr::get() 

回答

6

他们都基本上做一样。 Qt版本似乎有能力用指针(QScopedPointer::take())潜逃,它允许您将所有权转让给其他人。你不能用scoped_ptr这样做,但你可以交换两种。

boost::scoped_ptrQScopedPointer也是明确不可复制的。

QScopedPointer确实有一种机制,允许您将“删除器”传递给指针。这实际上是给定类的公共静态成员,因此QScopedPointer仍然只是指针的大小。这意味着QScopedPointer的类型必须包含删除者的类型。

它们都在C++ 0x中被std::unqiue_ptr废弃。

+0

哦,所以std :: unqiue_ptr比任何范围指针更受欢迎?容器怎么样,两者的行为方式是一样的吗? – blueskin

+0

@blueskin:这是一个单独的问题。所以请单独询问。 –

+0

好的..谢谢Nicol – blueskin