繁体   English   中英

C ++智能指针解决

[英]C++ smart pointers address

我对智能指针有点困惑。 在下面的代码中,&运算符是否应该返回智能指针分配的地址或它控制的指针的地址?

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);
}

运行代码,我得到了不同的地址。 如果我使用原始指针运行等效代码,我得到相同的地址:

main() {
    int e = 1;
    int *k = &e;
    int *l = k;

    printf("(%p, %p)\n",k,l);
}

在第一个示例中,您将获取智能指针对象的地址。 智能指针中包含的原始指针是通过get()函数提供的。

实际上,智能指针的地址获取与常规指针几乎完全相同。 与第一个示例等效的原始指针将是:

main() {
    int e = 1;
    int *k = &e;
    int *l = k;

    printf("(%p, %p)\n",&k,&l); // now they're different!
}

而第二个例子的智能指针就是这样的:

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!
}

请调用std :: shared_ptr的.get()成员函数来获取所需的地址。

这里,主要技巧是共享指针的等于运算符( = )以这样的方式定义:当你这样做时:

std::shared_ptr<int> j = i;

j不会是i的完整副本。 但它只保留了我所拥有的共享指针的相同原始指针,因此,它们的地址将不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM