【发布时间】:2012-05-16 05:13:36
【问题描述】:
这是我想要实现的目标:
#include <iostream>
using std::cout;
#include <vector>
using std::vector;
int main()
{
vector<int> a {3, 7};
int *p = &a.at (0); //assign 3
for (int i = 0; i < 10; ++i) //swap and print (3,7,3...)
{
p = (*p == a.at (0) ? &a.at (1) : &a.at (0));
cout << *p << '\n';
}
}
我想使用智能指针而不是原始指针,看看它们如何更好,但无法真正弄清楚如何实现来回切换(这用于在游戏中轮流使用; 这是Player *)。
我尝试在两个单独的测试中用std::unique_ptr 和std::shared_ptr 替换这里的指针,使用reset 进行切换,在第一个之后都给出随机数,正如预期的那样。
接下来,我尝试了std::weak_ptr,因为它看起来像我需要的,尽管界面并不是那么相似。据我所见,使用它的唯一方法是通过lock(),所以我尝试将lock(). 附加到reset 的调用中,并将其附加到取消引用中,但它崩溃了。
如何使用std::weak_ptr 代替原始指针,或者我可以以某种方式实际使用其他指针之一?
【问题讨论】:
-
这里不需要weak_ptr,因为没有循环。为什么 shared_ptr 不工作?我建议发布那个代码,你得到的错误,并在那里寻求帮助。 unique_ptr 将不起作用,因为...只有一个人可以指向同一个东西...它是唯一的。
-
@CrazyEddie,共享指针不起作用,因为它是唯一指向它的指针,所以当它切换到另一个玩家时,没有任何东西指向第一个。
标签: c++ c++11 segmentation-fault smart-pointers weak-ptr