c 指標什麼時候才要用到new

2025-01-27 00:30:17 字數 1855 閱讀 3154

1樓:

使用指標時,如果不是指向標準型別一般都需要動態分配記憶體。需要使用關鍵字new或malloc函式來實現。

也簡單介紹下new用法吧:

雖然有三種new的用法,但是分為兩大類也未嘗不可,那麼是哪兩類呢?其一是new operator,也叫new表示式;其二是operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。

new表示式比較常見,也最常用,例如:

string* ps = new string("abc");

上面這個new表示式完成了兩件事情:申請記憶體和初始化物件。

new操作符類似於c語言中的malloc,只是負責申請記憶體,例如:

void* buffer = operator new(sizeof(string));

注意這裡多了乙個operator。這是new的第二個用法,也算比較常見吧。

那麼第三個用法就不很常見了,官方的說法是placement new,它用於在給定的記憶體中初始化物件,也就是說你手中已有一塊閒置的記憶體。

2樓:網友

指標只是乙個位址,如果你想為指標分配新的空間用於儲存資料時,就需要用到new

3樓:離離原上花開

需要動態分配空間的時候,或建立動態陣列的時候。

兩者區別是乙個是(),乙個是。

4樓:網友

就是你建立這個指標的時候還不知道指到**去的情況下,就要在下面動態建立。

c++,關於指標,引用和new,如圖?

5樓:網友

首先書上應該是印刷錯誤,傳參不應該是引用才會有new的效果,用引用的話返回的還是原結構體的位址。

傳遞的結構時,編譯器會在棧上分配乙個能容納這個結構體的空間,並複製結構體所有成員的值,只能說效果相當於new了乙個臨時結構體,但是還是有區別的,new是分配在堆上的,不會被棧資料覆蓋掉,而且需要主動delete,除非整個程式退出才會被系統**。然而這個記憶體塊是通過壓棧的方式建立的,函式返回的是棧上的臨時位址,函式退出後通過退棧送到eax暫存器並賦值給外部變數。由於發生了退棧,此時該臨時結構體處於棧自由空間,實際上已經釋放了,隨時可能會被覆蓋掉,因此叫做無名結構體,實際上就是記憶體洩漏,這種情況下外部變數很容易成為野指標。

我認為根本不是忘不忘的問題,而是這種**完全是存在潛在風險的,根本不會這麼寫,函式內分配在棧上資料都會因為函式退出而釋放,根本不需要主動delete。所以我認為寫書的人耍技巧但又沒說明這種寫法的危險性,而且本質上根本不是new不需要釋放。

我在clone裡面對a做了+1操作,以說明函式內的物件是個臨時結構體。右邊是輸出結果,注意函式形參不是引用,另外函式內賦值給p的時候需要加個&以取位址。

再說一遍,這種寫法是不規範的,純屬投機取巧,可讀性差,真正專案根本不會這麼寫,時間長了自己都看不懂。

6樓:網友

這個**有問題,因為指標未初始化就賦值了。

正常的**應該是這樣的:

free_throws *pt=new free_throws;

pt=ft;

return *pt;

所謂隱藏了new是指new是在這個函式內部進行的,外部看不到。

因為new申請的是動態記憶體,退出函式後記憶體不會自動釋放,要釋放得手動用delete &jolly;,所以很容易忘記釋放。

這個函式的作用就是拷貝引數ft表示的結構體變數到動態記憶體中,然後返回這個拷貝的常量左值引用。

此外,free_throws & jolly=clone(three);

應該改成。const free_throws & jolly=clone(three);

否則會報錯。

C語言中什麼時候需要用到符號,c語言程式設計中什麼時候用 什麼時候用 ?

是取地址符號!當從鍵盤輸入一個資料到記憶體單元時,先找到記憶體單元的地址,再將資料放到記憶體單元中 例如 int a 定義一個整型變數a,給它分配一個記憶體空間scanf d a 從鍵盤輸入資料,找到a的地址放進去。取地址符號 在指標中用到比較多 例如 int p a 定義一個指標變數p,p指向a ...

c語言什麼時候使用陣列什麼時候使用指標

任何時候都可以使用陣列,使用指標。定義時,通常只有字元指標,和字元陣列指標直接定義。用來表示字串或字串陣列。其他一般定義陣列。操作時用指標或陣列。其他指標,多半用在引數傳遞,資料結構內部 不確定需要記憶體的大小,或者連結串列,二叉樹等鏈式結構 的時候。還有一種是有些函式引數就是指標,這時定義一個指標...

c語言指標什麼時候加星號什麼時候不加

1 宣告及定義一個指標時,需要用 表示識別符號是一個指標。比如int p 定義一個內指標,p是int 型別,這裡的容 主要說明變數是指標型別。2 作為間接訪問運算子 int a 2 int p a printf d n p,p 以上面的例子來說 p 是指標,是一個地址,它是int 型別。p 是指標所...