スレッド内より
C++ で new キーワードを使用する必要があるのはいつですか?
答えは、関数からオブジェクトへのポインターを返す必要がある場合、オブジェクトへのポインターを作成するためにいつ「new」を使用する必要があるかについて語っています。
ただし、以下のコードは正常に動作します。新しいポインターにメモリを割り当てる代わりに、ローカル ポインターを使用します。
node* queue::dequeue(){
if(head==0){
cout<<"error: the queue is empty, can't dequeue.\n";
return 0;
}
else if(head->next !=0){
node *tmp=head;
head=head->next;
tmp->next=0;
return tmp;
}
else if(head->next ==0){
node *tmp=head;
head=0;
tmp->next=0;
return tmp;
}
}
これは単純な dequeue() 操作です。私の tmp はローカル ポインターです。しかし、私はまだそれを返します。
マヘシュの功績
main() に次のステートメントがあります
node a8(8); //node constructor with the value
したがって、tmp は head が指すものを指し、head は a8 のような別のノードを指します。
a8 は main() 全体で有効なので、tmp も main() 全体で有効です。