1樓:隨便什麼名啦啦
c++中new運算子用於動態分配和撤銷記憶體的運算子。
new運算子使用的一般格式為new 型別 [初值]。
用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。
一般來說,使用new申請空間時,是從系統的「堆」(heap)中分配空間。申請所得的空間的位置時根據當時的記憶體的實際使用情況決定的。但是,在某些特殊情況下,可能需要在程式設計師指定的特定記憶體建立物件,這就是所謂的「定位放置new」(placement new)操作。
2樓:帷幕
動態申請記憶體空間,那句話的意思就是申請一個大小與str字串常量大小相同的字元陣列。c++中new出來的要用delete刪除。
3樓:匿名使用者
new一般表示建立一個類的物件(例項),返回該類物件的指標。
假設我們有class c{}; 要建立一個c類的物件(例項),主要有兩種方式。一個是用 c obj; 直接定義。這種方式定義的物件記憶體是在棧上(靜態記憶體)分配的。
另一種方式是定義一個類的指標然後用new來建立該物件並返回需要的指標地址。這種方式是用 c* obj = new c(); 此方式分配的記憶體是在堆上。
堆和棧的區別請參考:
另外,new c()會呼叫c類的無參建構函式。通過new c(...)傳入不同的引數可以呼叫對應的c的建構函式。
4樓:匿名使用者
在堆疊上動態建立一個儲存空間
c++中new的用法
5樓:老表有點呈
c++中new運算子用於動態分配和撤銷記憶體的運算子。
1、開闢單變數地址空間
new int; //開闢一個存放陣列的儲存空間,返回一個指向該儲存空間的地址.int *a = new int 即為將一個int型別的地址賦值給整型指標a. 2)int *a = new int(5) 作用同上,但是同時將整數賦值為5。
2、開闢陣列空間
要訪問new所開闢的結構體空間,無法直接通過變數名進行,只能通過賦值的指標進行訪問。用new可以動態開闢,撤銷地址空間。在程式設計序時,若用完一個變數,下次需要再用,可以在每次開始使用時開闢一個空間,在用完後撤銷它。
6樓:手機使用者
new int;//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址(即指標)
new int(100);//開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址
new char[10];//開闢一個存放字元陣列(包括10個元素)的空間,返回首元素的地址
new int[5][4];//開闢一個存放二維整型陣列(大小為5*4)的空間,返回首元素的地址
float *p=new float (3.14159);//開闢一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指標變數p
new運算子使用的一般格式為 new 型別 [初值] 用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。
delete運算子使用的一般格式為 delete [ ] 指標變數
例如要撤銷上面用new開闢的存放單精度數的空間(上面第5個例子),應該用 delete p;
前面用「new char[10];」開闢的字元陣列空間,如果把new返回的指標賦給了指標變數pt,則應該用以下形式的delete運算子撤銷該空間:
delete pt;//在指標變數前面加一對方括號,表示是對陣列空間的操作
例 開闢空間以存放一個結構體變數。
#include
#include
using namespace std;
struct student //宣告結構體型別student
;int main( )
執行結果為 wang fun 10123 m
7樓:幸運夕夕
c++中new的用法有三種,具體如下:
一、new operator,也叫new表示式;new表示式比較常見,也最常用,例如:
上面這個new表示式完成了兩件事情:申請記憶體和初始化物件。
二、operator new,也叫new操作符。這兩個英文名稱起的也太絕了,很容易搞混,那就記中文名稱吧。new操作符類似於c語 言中的malloc,只是負責申請記憶體,例如:
注意: 這裡多了一個operator。這是new的第二個用法,也算比較常見吧。
三、placement new,它用於在給定的記憶體中初始化物件,也就是說你手中已有一塊閒置的記憶體,例如:
那麼現在buffer是你所擁有閒置記憶體的指標buffer = new(buffer) string("abc"); //呼叫了placement new,在buffer所指向的記憶體中初始化string型別的物件,初始值是"abc",事實上,placement new也是new表示式的一種,但是比普通的new表示式多了一個引數,當然完成的操作和返回值也不同。
因此上面new的第一種用法可以分解兩個 動作,分別為後面的兩種用法。
注意:1、使用者是無法主動呼叫建構函式的,所以需要藉助placement new,但是使用者可以主動呼叫解構函式,所以用完這些物件後,呼叫解構函式,然後用對應分配記憶體的方法去釋放記憶體。
2、事實上malloc並不一定比operatornew節省多少時間,用placement new常常是為了考慮效能,所以會配合記憶體池一起使用。
8樓:匿名使用者
new的功能是動態分配記憶體。
語法就是 new 型別名t(初值列表)
9樓:
new 的作用是動態開闢空間,一般的形式估計你也會了。我就直接給你講題吧
你這個函式的作用是動態建立一個(n1+1)*(n2+1)的二維陣列(注:在c++中 直接用new(a)這種形式是錯誤的)
首先明白所謂指標就是存放地址的變數,這一點最重要double **a=new double*[n1+1];
這句話的意思是開闢以一塊連續的空間用來儲存指標變數(指標的指標),它的大小是n1+1。*a是指標,那麼**a就是存放指標的指標。那個new後的double* 相當於一個強制轉換。
因為用new時和陣列的名字無關所以[n1+1]前的陣列名可以省略。這個類比於new double[3];
for(i=0;i<=n1;i++)
這個語句就是給把指標付給指標的指標,看下邊的圖你就明白了;
多琢磨一下!
10樓:有界函式
推薦你看一下effictive c++,這裡面有單獨的一節是講 new 的。細緻的講不了,可以自己去看看。
c++語言中,new表示什麼的關鍵字?
11樓:花花
「new」是c++的一個關鍵字,同時也是操作符關於new的話題非常多,因為它確實比較複雜,也非常神祕,下面我將把我瞭解到的與new有關的內容做一個總結。
new的過程
當我們使用關鍵字new在堆上動態建立一個物件時,它實際上做了三件事:獲得一塊記憶體空間、呼叫建構函式、返回正確的指標當然,如果我們建立的是簡單型別的變數,那麼第二步會被省略假如我們定義瞭如下一個類a:
class a
void say()
};//呼叫new:
a* pa = new a(3);
那麼上述動態建立一個物件的過程大致相當於以下三句話(只是大致上):
a* pa = (a*)malloc(sizeof(a));
pa->a::a(3);
return pa;
雖然從效果上看,這三句話也得到了一個有效的指向堆上的a物件的指標pa,但區別在於,當malloc失敗時,它不會呼叫分配記憶體失敗處理程式new_handler,而使用new的話會的因此我們還是要儘可能的使用new,除非有一些特殊的需求
new的三種形態
到目前為止,本文所提到的new都是指的「new operator」或稱為「new expression」,但事實上在c++中一提到new,至少可能代表以下三種含義:new operator、operator new、placement new
c++中copychars是什麼意思
12樓:育知同創教育
copychars是字元拷貝的意思。。
使用方法:
c******string str(_t("******************x"), 20, pmgr);
tchar* pszsrc = _t("hello world!");
_tprintf_s(_t("%s\n"), str);
str.copychars(str.getbuffer(), pszsrc, 12);
_tprintf_s(_t("%s\n"), str);
new +類名什麼意思 c++
13樓:淚之夢幻
新建一個這個類名下的物件。
當使用關鍵字new在堆上動態建立一個物件時,它實際上做了三件事:獲得一塊記憶體空間、呼叫建構函式、返回正確的指標。當然,如果建立的是簡單型別的變數,那麼第二步會被省略。
new int;//開闢一個存放整數的儲存空間,返回一個指向該儲存空間的地址(即指標)
new int(100);//開闢一個存放整數的空間,並指定該整數的初值為100,返回一個指向該儲存空間的地址
new char[10];//開闢一個存放字元陣列(包括10個元素)的空間,返回首元素的地址
new int[5][4];//開闢一個存放二維整型陣列(大小為5*4)的空間,返回首元素的地址
float *p=new float (3.14159);//開闢一個存放單精度數的空間,並指定該實數的初值為//3.14159,將返回的該空間的地址賦給指標變數p
new運算子使用的一般格式為 new 型別 [初值] 用new分配陣列空間時不能指定初值。如果由於記憶體不足等原因而無法正常分配空間,則new會返回一個空指標null,使用者可以根據該指標的值判斷分配空間是否成功。
c 中new結構體的問題,c 中new一個結構體的問題。
這是個引數匹配的問題。你的test函式的引數是一個指標陣列,陣列的每個元素是指向stu結構體的指標,而你在呼叫test函式時,你傳進去的引數一個指向結構體陣列的指標,他們的型別不匹配,你只要將test函式的引數中的 去掉即可,即改為void test struct stu s 因為引數型別不匹配。將...
C 中的用法,C 中new的用法
除了樓上說的 還有 引用 和 取地址 的含義int a int b a 上述兩行語句執行完之後,a b表示同一個變數,對其中一個的操作相當於對另一個的操作 int a int b a 則b中儲存的是a的地址。對 b 的任何操作相當於對a的操作。表示引用,就是物件的另一個名字,例如 int i 10 ...
C 中new分配記憶體的問題,C 動態分配記憶體 記憶體洩漏問題 new
這樣是會有記憶體洩漏的,因為第一次執行s new stu 後,系統申請了一塊新的記憶體空間 型別為stu 並把其地址賦給s 第2此執行s new stu後,系統又申請了一塊新的記憶體空間,並把其地址賦給s,此時把s原來的值覆蓋掉了,也就是第一次申請的記憶體空間的地址丟失了 而delete s 只是把...