#include <iostream>
#include <utility>
int main()
{
double* ptr;
{
double temp = 5.5;
ptr = new double(std::move(temp));
} // temp dies here
std::cout << *ptr << "\n";
delete ptr;
}
私はこれが分かります。しかし、私のポイントは、この "5.5"の値が同じだが動的に割り当てられたアドレスに直接転送されるかどうかである。つまり、temp
が現在スコープに入っていなくても、ptr
はまだtemp
を指していますか?変数の有効期間を延長する
短期的な地域の範囲からより長期の記憶域に移行し、その後変数がいつ死ぬかを決定するという巨大な配列だとしましょう。
詳細な説明:
我々はメモリのアドレスAに位置していると仮定します。それはしばらくして死ぬつもりですが、死ぬ前に私たちはクールなトリックを作り、この同じAアドレスをロックして死ぬことにします。だから私たちはそれを生かし続けるために物をコピーする必要はありませんでした。私たちはただそれをロックした。それはC++で可能ですか?
いいえ、アドレスがスタック上にある場合、関数を返すと無効になります。 –
私たちはそれを生かし続けるために何かにコピーする必要はありませんでした._静的なローカル変数やグローバルな静的な静的な変数とよく似ていますか? – txtechhelp
'' std :: move'は '' double'には何もしません。あなたは最後にコピーをします。 – Jarod42