1
12
这里的这条线可能正是让你困惑的地方。
你在这里所做的就是
你应该这么做
这将正确地保持引用计数。顺便说一下,
|
2
4
几乎正确使用的很多东西:
这里参数shpoutodp是输入参数的副本。考虑到这是一个共享指针,没什么大不了的,但这可能不是你想要的。您可能希望通过引用传递,否则首先为什么要将其传递给函数。
传入时重置参数。
除非你真的需要,否则不要使用get-on共享指针(如果你真的需要的话)。提取指针对于获取指针指向的位置并使您更容易出错是不必要的,因为您正在处理指针。等效安全(R)线为:
这就是一切都出错的地方:
您正在从指针创建新的共享指针。不幸的是,指针已由另一个共享指针管理。因此,现在有两个共享指针,它们认为自己拥有指针,并将在指针超出范围时将其删除(第一个指针在函数末尾超出范围,因为它是输入参数的副本(而不是引用))。正确的做法就是做一个作业。然后共享指针知道它们共享指针:
下一行虽然不是完全错误,但它假定所使用的迭代器是随机访问(对于向量来说是正确的)。
但这使得代码更脆弱,因为typedef odpvec中的一个简单更改将在没有任何警告的情况下破坏代码。因此,为了使其更符合正常的迭代器用法,请使用!=对end()进行检查时,也首选预增量运算符:
|
3
2
编辑:响应注释,您可以将for循环的主体更改为:
伊迪丝2:都说了,你为什么不使用std::find_如果在这里?
|
4
1
关于
当你打电话
你不需要这样做。就让
这是一个例子 RAII 在行动中。
您需要管理的资源(在本例中是
|
Arnish Grover · 为什么这里两次调用析构函数?[副本] 7 年前 |
hvertous · 在析构函数方法中引发异常 7 年前 |
Phi Truong · 链表析构函数C++ 7 年前 |
allo · C++程序挂起在向量析构函数中 7 年前 |
user8185371 · 释放对象的内存与终止内务管理? 7 年前 |
Peter Hwang · 销毁列表结构的全局数组 7 年前 |