C++ 来自原始指针的QSharedPointer

C++ 来自原始指针的QSharedPointer,c++,qt,boost,qtcore,qsharedpointer,C++,Qt,Boost,Qtcore,Qsharedpointer,我现在有这样的东西: QSharedPointer<t> Qsharedfoo; Qsharedfoo = rawfoo QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject); 直接从这个角度来看,我们有这样的东西: QSharedPointer<t> Qsharedfoo; Qsharedfoo = rawfoo QSharedPointer<M

我现在有这样的东西:

QSharedPointer<t> Qsharedfoo;
Qsharedfoo = rawfoo
QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);
直接从这个角度来看,我们有这样的东西:

QSharedPointer<t> Qsharedfoo;
Qsharedfoo = rawfoo
QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);
QSharedPointer obj=QSharedPointer(新的MyObject);
您基本上可以以相同的方式传递指针:

// Here I assume that T is the class you're using for Qsharedfoo.
QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);
//这里我假设T是用于Qsharedfoo的类。
QSharedPointer Qsharedfoo=QSharedPointer(rawfoo);
如何使foo point拥有原始指针并开始指向它。我知道在使用共享指针的boost中,我们可以使用boost::make_shared我们如何使用QSharedPointer

不幸的是,你不能

  • 您将始终需要遍历构造函数,而不是使_共享

  • 它不一定是例外安全的

总而言之,您需要按照以下步骤检查构造函数:

Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload
Qsharedfoo.reset(rawFoo);

但正如在开始时提到的,这些操作与您正在寻找的操作并不相同。

与旧的std::auto_ptr非常相似,我也更喜欢使用reset()来避免您提到的轻微开销。但我似乎误解了米斯蒂德真正想要回答的问题。