簡體   English   中英

C ++對象聲明混亂?

[英]C++ object declaration confusion?

我試圖在C ++中實現BST,並且遇到了以下兩種創建節點的方法:

node* z = new node();
z->key = d;
z->left = NULL;
z->right = NULL;

然后這個:

node* y = NULL;
node* x = root;
node* parent = NULL;

呼叫新操作員與否的區別是什么?

編輯

因此,例如:

node* q = new node(); 

node* q;

為什么要選擇一種方式呢? 一種方式或另一種方式有優勢嗎?

要回答評論中的問題,是的,有區別。

當您執行node* q = new node()您聲明一個指向node對象的指針,然后在運行時為一個node對象動態分配足夠的內存,並調用默認構造函數(或者,值初始化該對象,這取決於對象類/結構),最后將指針分配給新分配的對象q

當您執行node* q; 您只需要聲明一個指向node對象的指針即可。 指針將指向的內容取決於在何處聲明指針:如果將其聲明為全局變量,則它將初始化為零,並成為空指針;否則,指針將變為零。 如果將其聲明為局部變量,則其值是不確定的,並且實際上似乎是隨機的。 兩者都不是有效的指針,對其取消引用將導致未定義的行為 還有第三種選擇,那就是在其中聲明node* q; 作為classstruct的成員變量,則初始值取決於類/結構的創建和初始化方式(例如,如果結構是值初始化的,是否有初始化它的構造函數,等等)。

我很確定(如果我錯了,請糾正我),使用new運算符為該變量分配動態內存。 這些變量很可能已經分配了一些垃圾值,當您為它們分配新值時這些值將被覆蓋。 而為它分配NULL只是給它分配任何NULL值(可能為0000000)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM