这是我想要实现的目标:
#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
它看起来像我需要的东西,尽管界面并不是那么相似。从我所看到的,使用它的唯一方法是 through lock()
,所以我尝试lock().
在调用之前reset
附加它并将其附加到取消引用,但是崩溃了。
我如何使用std::weak_ptr
而不是原始指针,或者我可以以某种方式实际使用其他指针之一?