c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)
生活随笔
收集整理的這篇文章主要介紹了
c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
c中使用malloc出現的問題
c的動態內存分配函數太復雜,容易令人混淆,是不可接受的,c++中我們推薦使用運算符new和delete
new運算符和delete運算符
Person *p=new Person會返回一個Person
默認調用析構函數,開辟空間,返回不是void*,不需要強制轉換
delete釋放
new對象用void *取接受,釋放不了對象
new出來的是數組,如何釋放 ? delete[]
new出來的是數組,肯定會調用默認構造
#include<iostream>using namespace std;class Person{public:Person(){cout << "默認構造函數調用" << endl;}Person(int a){cout << "有參構造調用" << endl;}~Person(){cout << "析構函數調用" << endl;}};void test01(){//Person p1; //棧區開辟Person *p2 = new Person;//堆區開辟//所有new出來的對象,都會返回該類型的指針//malloc返回void*還要強轉//malloc會調用構造嗎?不會 new會調用構造//new運算符,malloc是函數//釋放堆區域的空間//delete也是運算符,要配合new用,malloc配合free用delete p2;}void test02(){void *p = new Person;//當用void* 接受new出來的指針,會出現釋放的問題delete p;//無法釋放p}void test03(){//同過new來開辟數組//一定會調用默認構造函數,所以一定要提供默認構造Person *pArray = new Person[10];//Person pArray2[2] = { Person(1), Person(2) };//在棧上開辟數組,可以指定有參構造//釋放數組 delete[]必須加上中括號delete []pArray;}int main(){//test01();//test02();test03();system("pause");return 0;}malloc/free和new/delete的區別
malloc/free和new/delete的共同點是:都是從堆上申請空間,并且需要用戶手動釋放。不同的地方是:
總結
以上是生活随笔為你收集整理的c++中new的总结(动态管理,malloc存在的问题,malloc与new的区别)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 残角子宫需要切除输卵管吗
- 下一篇: c++中静态成员变量和静态成员函数