最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1.ClassName * p = new ClassName;

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

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

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ù),會使用編譯器幫我們生成的,并且會初始化成員變量,比如 int 類會被初始化為 0

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

此時打印出來值是 0

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

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

4.補充

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

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

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

C++指針初始化問題

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

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

下面就總結(jié)一下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)存時,應(yīng)該自己手動將指針設(shè)置為NULL。

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

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

自己遇見的問題

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

總結(jié)

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

相關(guān)文章

  • C++通用動態(tài)抽象工廠的實現(xiàn)詳解

    C++通用動態(tài)抽象工廠的實現(xiàn)詳解

    在面向?qū)ο蟮木幊讨?一般通過繼承和虛函數(shù)來提供抽象能力,下面這篇文章主要給大家介紹了關(guān)于C++通用動態(tài)抽象工廠的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • C++ vector如何動態(tài)申請內(nèi)存的元素

    C++ vector如何動態(tài)申請內(nèi)存的元素

    vector是一種動態(tài)數(shù)組,本文主要介紹了C++ vector如何動態(tài)申請內(nèi)存的元素,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    C語言數(shù)據(jù)結(jié)構(gòu)之隊列的定義與實現(xiàn)

    隊列是一種特殊的線性表,特殊之處在于它只允許在表的前端(head)進(jìn)行刪除操作,而在表的后端(tail)進(jìn)行插入操作。本文將詳細(xì)講講C語言中隊列的定義與實現(xiàn),感興趣的可以了解一下
    2022-07-07
  • C語言中操作密碼文件的一些函數(shù)總結(jié)

    C語言中操作密碼文件的一些函數(shù)總結(jié)

    這篇文章主要介紹了C語言中操作密碼文件的一些函數(shù)總結(jié),包括setpwent()函數(shù)和getpwent()函數(shù)以及endpwent()函數(shù),需要的朋友可以參考下
    2015-08-08
  • C語言新建臨時文件和臨時文件名的方法

    C語言新建臨時文件和臨時文件名的方法

    這篇文章主要介紹了C語言新建臨時文件和臨時文件名的方法,分別是mkstemp()函數(shù)和mktemp()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程

    這篇文章主要介紹了Visual Studio 2019配置OpenCV4.1.1詳細(xì)圖解教程 ,需要的朋友可以參考下
    2020-02-02
  • Qt中connect()函數(shù)及用法詳解

    Qt中connect()函數(shù)及用法詳解

    connect() 函數(shù)就是Qt 框架中用于將信號(SIGNAL)和槽(SLOT)關(guān)聯(lián)起來的核心函數(shù),本文給大家介紹Qt中connect()函數(shù),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • C++中httplib的使用小結(jié)

    C++中httplib的使用小結(jié)

    本文主要介紹了C++中httplib的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • C++深入探究引用的使用

    C++深入探究引用的使用

    引用是C++一個很重要的特性,顧名思義是某一個變量或?qū)ο蟮膭e名,對引用的操作與對其所綁定的變量或?qū)ο蟮牟僮魍耆葍r,這篇文章主要給大家總結(jié)介紹了C++中引用的相關(guān)知識點,需要的朋友可以參考下
    2022-05-05
  • 利用C++求絕對值的幾種方法例子

    利用C++求絕對值的幾種方法例子

    相信大家在學(xué)習(xí)C++時,應(yīng)該都有做過求絕對值的題目,下面這篇文章主要給大家介紹了關(guān)于利用C++求絕對值的幾種方法例子,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04

最新評論

通海县| 马关县| 泉州市| 柏乡县| 大理市| 阿鲁科尔沁旗| 桑日县| 尉犁县| 广河县| 抚宁县| 天气| 蓝田县| 乌苏市| 富川| 科技| 东安县| 海南省| 葫芦岛市| 镇沅| 林州市| 玉屏| 湖北省| 郸城县| 乐都县| 海宁市| 盐津县| 遵化市| 宝鸡市| 海原县| 绩溪县| 丹凤县| 乐至县| 富民县| 长阳| 贵定县| 黔南| 山阳县| 绥芬河市| 桦南县| 灌云县| 梁平县|