簡體   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