亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

1.ClassName * p = new ClassName;

調(diào)用默認構造函數(shù)。

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

class NoConstructor ? ?//沒寫構造函數(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)用默認構造函數(shù)。

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

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

此時打印出來值是 0

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

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

4.補充

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

非默認構造函數(shù)稱為自定義構造函數(shù)。

如果在一個類里,兩種默認構造函數(shù)都寫了,那么new ClassName和new ClassName()都不可用。因為編譯器無法確定要使用哪一個構造函數(shù)。

C++指針初始化問題

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

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

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

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

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

這個指針就指向這個變量的內(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釋放,因為new出來的是返回的堆的空間,堆的空間是不會自動釋放的,存放變量的棧才會自動釋放。

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

3.把指針設置為NULL或者0

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

自己遇見的問題

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

總結

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

相關文章

  • c++ 基于opencv 識別、定位二維碼

    c++ 基于opencv 識別、定位二維碼

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

    C++中對象的常引用、動態(tài)建立和釋放相關知識講解

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

    使用MySQL編程實現(xiàn)C語言功能強大化步驟示例

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

    C++中進行txt文件讀入和寫入的方法示例

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

    C++全面精通類與對象

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

    C語言實現(xiàn)學生考勤系統(tǒng)

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

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

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

    C迷途指針詳解

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

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

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

    C++中的結構體vector排序問題

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

最新評論