日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

new、delete、malloc、free 在堆栈上的使用区别 C++

發布時間:2025/4/16 c/c++ 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 new、delete、malloc、free 在堆栈上的使用区别 C++ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

int a[10] = { 0 } // 這是在棧中的
int b[10] = malloc(sizeof(int) * 10); // 這是在堆中的


malloc和free是函數,是標準庫stdio中的
new和delete是關鍵字
new在堆上初始化一個對象的時候,會調用構造函數。 malloc不會。
delete使用之前,會調用對象的析構函數,再釋放。 ?free不會調用析構。

?

#if 0 //數組在堆中還是在棧中 int a[10] = { 0 } // 這是在棧中的 int b[10] = malloc(sizeof(int) * 10); // 這是在堆中的 malloc和free是函數,是標準庫stdio中的 new和delete是關鍵字 new在堆上初始化一個對象的時候,會調用構造函數。 malloc不會。 delete使用之前,會調用對象的析構函數,再釋放。 free不會調用析構。 #endif#define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;//在堆上 開辟內存空間// 開辟一個字節 //C語言中 void test1() {int* p = (int*)malloc(sizeof(int));*p = 10; //使用printf("C:%d", *p);printf("\n");if (p != NULL){free(p);p = NULL;}}//C++語言中 void test2() {int* p = new int;*p = 2; //使用cout << "C++:" << *p << endl;if (p != NULL){delete p;p = NULL;}}// 開辟一個數組 //C語言中 void test3(int num) {int* arr_p = (int*)malloc(sizeof(int)*num);//賦值使用for (int i = 0; i < num; i++){arr_p[i] = i+1;}//打印for (int i = 0; i < num; i++){printf("%d,",arr_p[i]);}printf("\n");//釋放if (arr_p != NULL){free(arr_p);arr_p = NULL;} }//C++語言中 void test4(int num) {int* arr_p = new int[num];//賦值使用for (int i = 0; i < num; i++){arr_p[i] = i + 1;}//打印for (int i = 0; i < num; i++){cout << arr_p[i] << "," ;}cout << endl;//釋放if (arr_p != NULL){delete[] arr_p;arr_p = NULL;} }class Test { public:Test(int id,const char* name){m_id = id;int len = strlen(name);m_name = (char*)malloc(len + 1);strcpy(m_name, name); cout<<"Test()"<<endl;}void printT(){cout << "m_id=" << m_id << ",m_name=" << *m_name << endl;}~Test(){cout << "~Test()" << endl;} private:int m_id;char *m_name; };void test5() {Test* tp = (Test*)malloc(sizeof(Test));tp->printT(); //錯誤,因為tp指向的對象在創建的時候沒有初始化值,沒有可以打印的值if (tp != NULL){free(tp);tp = NULL;} } void test6() {Test* tp = new Test(10,"zhangsan"); //創建的時候,就調用了構造函數tp->printT();if (tp != NULL){delete tp;tp = NULL;} }int main() {test1();test2();test3(10);test4(10);cout << "--------" << endl;//test5();cout << "--------" << endl;test6();return 0; }

?

?

總結

以上是生活随笔為你收集整理的new、delete、malloc、free 在堆栈上的使用区别 C++的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。