![]() |
1
43
我对科莫纳德的回答投了赞成票,但有一个警告:
编辑:
下面是
如果
|
![]() |
2
30
有些情况下,你想使用 作用域指针 指向几个可互换对象中的一个:由于缺少移动语义,它不会因为意外的移动而意外地指向null是非常安全的(对于明显的bug)。值得一提的是: 作用域指针 s还是可以的 互换 高效的ped。要使其可移动和/或可复制,但仍然使用这些交换语义,您可能需要考虑使用 指向一个 作用域指针 |
![]() |
3
2
在我看来,使用
|
|
4
2
我不同意阿拉克的观点。在两者之间没有一个更好的选择,因为它通常取决于用法。这就好比说智能汽车在所有用途上都优于皮卡车,因为它更轻更快。实际上,有时你需要一辆卡车,有时你不需要。指针的选择应该基于您的需要。 scoped\u ptr的优点是增加了安全级别。通过使用scoped\u ptr,您会注意到所创建的内存将只存在于该作用域,而不再存在,因此您可以获得编译时保护,以防试图移动或传输它。 所以,如果你想创建一些东西,但是限制它的作用域,可以使用scoped\u ptr。如果你想创建一些东西并且所有权可以移动,请使用unique\ ptr。如果您想创建一些东西,并在所有引用都不存在时共享指针和清理,请使用shared\u ptr。 |
![]() |
5
1
根据Karu的评论,还添加了必要的内容,使我的代码可编译。
另外,在最初的示例中,您应该重写类A,如下所示: A级{ //取得所有权 A(唯一) &&p) :p(std::move(p)){}
}; |