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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题)

發布時間:2025/3/15 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

static_cast關鍵字(編譯時類型檢查)


代碼如下:

#include <iostream> using namespace std; class Base{ public :Base(const int baseData){m_baseData = baseData;}void print()const{cout << "m_baseData is " << m_baseData << endl;} private:int m_baseData; };class Upgrade :public Base{ public:Upgrade(const int upgradeData) :Base(upgradeData){m_upgradeData = upgradeData;}void setGradeData(const int &data){m_upgradeData = data;}void print()const{cout << "m_upgradeData is " << m_upgradeData << endl;} private:int m_upgradeData; };int main(){double double_1 = 100.0001;int a = static_cast<int>(double_1);cout << "double_1 is " << double_1 << endl;cout << "a is " << a << endl;Base *base = new Base(100);cout << "base print:";base->print();Upgrade *upgrade = new Upgrade(101);cout << "upgrade print:";upgrade->print();Base *castBase1 = static_cast<Base*>(upgrade);cout << "castBase1 print:";castBase1->print();Upgrade *caseUpgrade1 = static_cast<Upgrade*>(upgrade);cout << "caseUpgrade1 print:";caseUpgrade1->print();Upgrade *caseUpgrade2 = static_cast<Upgrade*>(base);cout << "caseUpgrade2 print:";caseUpgrade2->print();Upgrade *caseUpgrade3 = (Upgrade*)base;cout << "caseUpgrade3 print:";caseUpgrade3->print();cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;caseUpgrade3->setGradeData(1);cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;Base *base_base = upgrade;cout << "base_base print:";base_base->print();delete upgrade;//delete base;getchar();return 0; }

運行截圖如下:



這里就提一點:

Upgrade *caseUpgrade3 = (Upgrade*)base;cout << "caseUpgrade3 print:";caseUpgrade3->print();cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;caseUpgrade3->setGradeData(1);cout << "sizeof(*caseUpgrade3):" << sizeof(*caseUpgrade3) << endl;Base *base_base = upgrade;cout << "base_base print:";base_base->print();delete upgrade;//delete base;

這里把子類指針強指到了父類,并且還修改了子類的值,這真是個騷包的操作!!!






我的電腦是小端系統。

但是不能對base進行析構,會報如下的錯誤。

delete base;




原因是:分配了len長度的空間,卻用到了len + 1的長度,釋放的時候就報錯了

總結

以上是生活随笔為你收集整理的C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题)的全部內容,希望文章能夠幫你解決所遇到的問題。

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