【发布时间】:2016-02-26 03:40:57
【问题描述】:
首先,我知道 unique_ptr 和 share_ptr,但是我没有使用 C++11,因此我无法使用它们。
谷歌的每一项可能的研究都会使用这两个智能指针返回一个解决方案。我想要一个没有的。
我需要通过构造函数将指针的所有权传递给另一个类。
PointerToPass* myPointer = new PointerToPass();
MyClass* myClass = new MyClass(myPointer);
所以我可以使用原始指针,但我到处阅读我应该避免它的地方。
使用引用不是一种选择。
我可以使用来自 Qt 的智能指针来显示我传递了所有权,如下所示:
QScopedPointer<PointerToPass> myPointer(new PointerToPass());
MyClass* myClass = new MyClass(myPointer.take());
此选项清楚地表明指针已传递,并且所有权已授予 myClass,即使它仍在使用原始指针。
有没有更好的方式来传达这个想法?
如果能在 MyClass 构造函数签名中看到就更好了。
【问题讨论】:
-
您不应使用来自
take副本的new。take将作用域 ptr 重置为 null。 -
是的,但在这个范围内我不再使用 myPointer。它只有在通过后才在 MyClass 中使用。
-
为什么不
new MyClass(new PointerToPass());?或者就此而言,如果指针类型不带参数,则让MyClassctor 分配它。 -
是的,我可以。只是在实际代码中,我必须将 3 个参数传递给 PointerToPass,所以它变得一团糟。
-
@JamesRoot 我可能错了,但可变参数构造函数只能使用 C++11。我明确表示我没有使用它。