5

私はスマートポインタと少し混乱しています。次のコードでは、& 演算子は、スマート ポインター割り当てのアドレスを返す必要がありますか?それとも、制御しているポインターのアドレスを返す必要がありますか?

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

3 に答える 3

6

最初の例では、スマート ポインター オブジェクトのアドレスを取得しています。スマート ポインターに含まれる生のポインターは、get()関数を介して提供されます。

実際、スマート ポインターのアドレス取得は、通常のポインターとほぼ同じように機能します。最初の例に相当する生のポインターは次のようになります。

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

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

そして、2番目の例に相当するスマートポインターは次のようになります。

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!
}
于 2013-05-24T04:50:32.500 に答える
0

std::shared_ptr の .get() メンバー関数を呼び出して、必要なアドレスを取得してください。

于 2013-05-24T04:40:23.743 に答える