一直试图了解几天共享指针,感觉就像我似乎无法得到它。不知道它是否明显或太复杂。首先,任何人都可以给我一个例子,你会真正使用共享指针。维基百科上的例子对我来说毫无意义。你将如何将共享指针传递给另一个函数或使用共享指针创建一个对象。那么,你如何传递它,你会在哪里使用它?任何信息或例子都会很棒。QSharedPointer,如何传递它们,我需要它们吗?
另外,我有这个问题,我不知道该用什么。我有这个功能,我分配QFile
并将它传递给另一个类中的函数。该功能将该文件作为QIODevice*
,然后创建一个包含该文件的对象。我想知道什么是最好的解决方案在这里以及如何(如果我应该)在这里使用共享指针?如何与<QFile>
共享指针并将其传递到函数需要<QIODevice>
的地方。感觉就像我根本没有共享指针...
我的另一种方法是将QFile
的分配置于QScopedPointer
。然后我将它传递给课程,并在创建文件存储对象时使用QPointer
或QScopedPointer
。在第一个调用函数结束时,我应该调用take()对吗?
function() {
QScopedPointer<QFile> item(new QFile("filename"));
SomeClassObject->doStuff(item.data());
item.take();
}
---------------------------------
SomeClass::doStuff(QIODevice *item) {
_currentObject = new MyObject(item); // should _currentObject be a smartpointer?
...
}
---------------------------------
class MyObject {
QPointer<QIODevice> _item;
...
MyObject(QIODevice *item) { _item = item; }
}
所以我想要一种方法来存储指针,并在创建过程中处理它们,如果“新”引发异常。
我没有看到让函数的参数成为'QScopedPointer'的好理由。或者使它成为* reference *(完全避免指针),将它作为一个原始指针(允许*所有*管理的指针类型)或使它成为一个共享指针(避免复制并使'_currentObject'共享对象,如果这是一个可能性)。传递作用域指针必须通过引用,然后强制用户选择智能指针,这不是一件好事(如果他们使用不同类型的智能指针,该怎么办?) – 2012-03-23 02:36:39
我没有看到为什么传递共享指针(而不是原始指针)是一个问题(除了强制特定类型之外)。我认为这比传递原始指针更安全(例如,您可以将参数存储到全局容器中,而不必担心调用者将它从您的下面删除)。共享指针当然不一定要通过引用,复制构造函数逻辑将确保副本的行为适当。你当然可以通过引用传递底层对象,但为什么要使用指针呢? – Attila 2012-03-23 02:45:32
它需要采取QIODevice,因为我不仅将它与QFile一起使用。在我的代码中还有其他一些情况,其中函数需要基类型 – chikuba 2012-03-23 03:05:40