私は最初の順序のポインターをメモリに1つずつ割り当てようとしています。2 番目のポインターは、このキューを通過し、そのポインターで作成されたオブジェクトを処理する必要があります。オブジェクトのキュー(それらへのポインターではない)を割り当てると、新しい配置が正常に機能しますが、ポインターで同じことをしようとすると問題が発生します。
int* p;
p = new int(1);
printf("%p - %d\n", p, *p); // address of int and its value
delete p;
最初のオブジェクトが作成されて削除され、ポインタがいくつかのアドレスで初期化され、次のオブジェクトがサイクルで作成されます
p = new(p) int(2); // (p) - memory will be allocated at address
// on which p points
printf("%p - %d\n", p, *p); // address of int and its value
delete p;
p++;
p = new(p) int(3); // (p) - memory will be allocated at address
// on which p points
printf("%p - %d\n", p, *p); // address of int and its value
delete p;
出力:
01C1FFD0 - 1
01C1FFD0 - 2
01C1FFD4 - 3;
int** pp;
pp = new int*;
printf("%p\n", pp); // address of int*
*pp = new int(1);
printf("%p - %d\n", *pp, **pp); // address of int and its value
delete *pp;
delete pp;
pp = new(pp) int*;
printf("%p\n", pp); // address of int*
*pp = new int(2);
printf("%p - %d\n", *pp, **pp); // address of int and its value
delete *pp;
delete pp;
pp++;
pp = new(pp) int*;
printf("%p\n", pp); // address of int*
*pp = new int(3);
printf("%p - %d\n", *pp, **pp); // address of int and its value
delete *pp;
delete pp;
int が *pp によって作成されていない場合、pp がインクリメントされている場合、後で pp を削除することは現実的ではありません。int が *pp によって作成された場合、アドレスと 2 番目の値に何か問題があります。
出力:
01C1FFD0
01C1FFE0 - 1
01C1FFD0
01C1FFD0 - 29491152
01C1FFD4
01C1FFD0 - 3
このキューを正しく整理する方法についてアドバイスをいただければ幸いです。