欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++如何使用new來初始化指向類的指針

 更新時(shí)間:2023年07月14日 08:57:03   作者:Fish`  
這篇文章主要介紹了C++如何使用new來初始化指向類的指針問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

C++使用new來初始化類的指針

1.ClassName * p = new ClassName;

調(diào)用默認(rèn)構(gòu)造函數(shù)。

如果類里沒有寫默認(rèn)構(gòu)造函數(shù),會(huì)使用編譯器幫我們生成的,但不會(huì)初始化成員變量,如

class NoConstructor ? ?//沒寫構(gòu)造函數(shù)的類
{
public:
?? ?~NoConstructor() {}
?? ?void printVal()?
?? ?{?
?? ??? ?cout << m_val << endl;?
?? ?}
private:
?? ?int m_val;
};
NoConstructor* p1 = new NoConstructor;
p1->printVal();`

打印出來的值是 -842150451,也就是未初始化。

2.ClassName * p = new ClassName();

調(diào)用默認(rèn)構(gòu)造函數(shù)。

如果類里沒有寫默認(rèn)構(gòu)造函數(shù),會(huì)使用編譯器幫我們生成的,并且會(huì)初始化成員變量,比如 int 類會(huì)被初始化為 0

NoConstructor* p2 = new NoConstructor();
p2->printVal();`

此時(shí)打印出來值是 0

3.ClassName * p = new ClassName(arg);

調(diào)用自定義構(gòu)造函數(shù),或含參數(shù)的默認(rèn)構(gòu)造函數(shù)(如果這兩種函數(shù)都定義了,它們的arg類型必須不同,這是函數(shù)重載的要求)。

4.補(bǔ)充

關(guān)于幾個(gè)概念:默認(rèn)構(gòu)造函數(shù)是指無參的構(gòu)造函數(shù),或有參數(shù)(即形參)、并且為所有形參指定了實(shí)參的構(gòu)造函數(shù)。

非默認(rèn)構(gòu)造函數(shù)稱為自定義構(gòu)造函數(shù)。

如果在一個(gè)類里,兩種默認(rèn)構(gòu)造函數(shù)都寫了,那么new ClassName和new ClassName()都不可用。因?yàn)榫幾g器無法確定要使用哪一個(gè)構(gòu)造函數(shù)。

C++指針初始化問題

c++中的指針是一個(gè)很經(jīng)典的用法,但是也是最容易出錯(cuò)的,比如定義了一個(gè)指針,必須對(duì)其進(jìn)行初始化,不然這個(gè)指針指向的是一個(gè)未知的內(nèi)存地址,后續(xù)對(duì)其操作的時(shí)候,會(huì)報(bào)錯(cuò)。

這只是其次,最讓人頭疼的就是指針錯(cuò)誤問題,往往編譯的時(shí)候可以通過,在程序運(yùn)行的時(shí)候,就會(huì)出現(xiàn)異常,如果對(duì)程序不是很熟悉,則不是很容易找到問題所在,我最近就遇到過很多這樣的問題,定義了一個(gè)結(jié)構(gòu)體指針,使用的時(shí)候忘記初始化,導(dǎo)致在后邊使用的時(shí)候程序報(bào)異常。

下面就總結(jié)一下c++指針初始化的一些方法,以及我自己遇到的一些問題以及心得體會(huì)。

c++指針初始化的一般方法

1.將一個(gè)已經(jīng)在內(nèi)存中存在變量的地址傳遞給定義的指針

這個(gè)指針就指向這個(gè)變量的內(nèi)存地址(相同的數(shù)據(jù)類型),完成初始化。

比如:

int a=2;
int *b=&a;

2.利用new開辟一塊地址空間

struct test{
? ? ? ?int a;
? ? ? ?int b;
}*t;
void main()
{
? ? int c=0;
? ? test *t=new test();
? ? c=t->a;
}

使用 new開辟的空間,記得使用delete釋放,因?yàn)閚ew出來的是返回的堆的空間,堆的空間是不會(huì)自動(dòng)釋放的,存放變量的棧才會(huì)自動(dòng)釋放。

delete釋放其實(shí)只是釋放了申請(qǐng)的這塊內(nèi)存空間,但是指針并沒有沒撤銷,指針還是指向這塊地址,但是不可用(靠人品吃飯的有可能可以用),是非法的。所以用delete釋放掉一塊堆內(nèi)存時(shí),應(yīng)該自己手動(dòng)將指針設(shè)置為NULL。

3.把指針設(shè)置為NULL或者0

這樣做一般只是為了沒有具體初始化的時(shí)候做的,這樣避免了野指針,后面可以使用if(指針==NULL)來判斷,然后再進(jìn)行操作。

自己遇見的問題

我在使用結(jié)構(gòu)體指針的時(shí)候,忘記將結(jié)構(gòu)體指針初始化,導(dǎo)致后面訪問結(jié)構(gòu)體成員變量的時(shí)候出現(xiàn)錯(cuò)誤(那種編譯沒錯(cuò),執(zhí)行出錯(cuò)的問題),后來將指針使用new初始化解決,還有一點(diǎn)就是,全局的變量名稱與局部變量名稱不要一樣。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • c++ 基于opencv 識(shí)別、定位二維碼

    c++ 基于opencv 識(shí)別、定位二維碼

    這篇文章主要介紹了c++ 基于opencv 識(shí)別、定位二維碼,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C++中對(duì)象的常引用、動(dòng)態(tài)建立和釋放相關(guān)知識(shí)講解

    C++中對(duì)象的常引用、動(dòng)態(tài)建立和釋放相關(guān)知識(shí)講解

    這篇文章主要介紹了C++中對(duì)象的常引用、動(dòng)態(tài)建立和釋放相關(guān)知識(shí)講解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • 使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例

    這篇文章主要為大家介紹了使用MySQL編程實(shí)現(xiàn)C語(yǔ)言功能強(qiáng)大化步驟示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C++中進(jìn)行txt文件讀入和寫入的方法示例

    C++中進(jìn)行txt文件讀入和寫入的方法示例

    這篇文章主要給大家介紹了C++中進(jìn)行txt文件讀入和寫入的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • C++全面精通類與對(duì)象

    C++全面精通類與對(duì)象

    類和對(duì)象是兩種以計(jì)算機(jī)為載體的計(jì)算機(jī)語(yǔ)言的合稱。對(duì)象是對(duì)客觀事物的抽象,類是對(duì)對(duì)象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲(chǔ)在內(nèi)存中—個(gè)可以擁有在某個(gè)范圍內(nèi)的可變存儲(chǔ)區(qū)域
    2022-05-05
  • C語(yǔ)言實(shí)現(xiàn)學(xué)生考勤系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)學(xué)生考勤系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生考勤系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二)

    C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(122.買股票的最佳時(shí)間之二),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C迷途指針詳解

    C迷途指針詳解

    這篇文章主要介紹了C迷途指針,迷途指針又稱為懸空指針、野指針,其對(duì)C程序的安全性與穩(wěn)定性影響巨大,本文對(duì)其原理與檢測(cè)方法做了較為詳盡的分析,需要的朋友可以參考下
    2014-09-09
  • C語(yǔ)言 實(shí)現(xiàn)輸入任意多個(gè)整數(shù)

    C語(yǔ)言 實(shí)現(xiàn)輸入任意多個(gè)整數(shù)

    這篇文章主要介紹了C語(yǔ)言 實(shí)現(xiàn)輸入任意多個(gè)整數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++中的結(jié)構(gòu)體vector排序問題

    C++中的結(jié)構(gòu)體vector排序問題

    這篇文章主要介紹了C++中的結(jié)構(gòu)體vector排序問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評(píng)論