Luc*_*utz 13 c++ pointers smart-pointers
我对智能指针有点困惑。在下面的代码中, & 运算符应该返回智能指针分配的地址还是它控制的指针的地址?
main() {
std::shared_ptr<int> i = std::shared_ptr<int>(new int(1));
std::shared_ptr<int> j = i;
printf("(%p, %p)\n", &i, &j);
}
Run Code Online (Sandbox Code Playgroud)
运行代码,我得到了不同的地址。如果我使用原始指针运行等效代码,我会得到相同的地址:
main() {
int e = 1;
int *k = &e;
int *l = k;
printf("(%p, %p)\n",k,l);
}
Run Code Online (Sandbox Code Playgroud)
cgm*_*gmb 14
在第一个示例中,您将获取智能指针对象的地址。智能指针中包含的原始指针是通过该get()函数提供的。
实际上,智能指针的地址获取几乎与常规指针完全相同。与第一个示例等效的原始指针如下:
main() {
int e = 1;
int *k = &e;
int *l = k;
printf("(%p, %p)\n",&k,&l); // now they're different!
}
Run Code Online (Sandbox Code Playgroud)
与第二个示例等效的智能指针如下:
main() {
std::shared_ptr<int> i = std::shared_ptr<int>(new int(1));
std::shared_ptr<int> j = i;
printf("(%p, %p)\n", i.get(), j.get()); // now they're the same!
}
Run Code Online (Sandbox Code Playgroud)