C++工作笔记-对static_cast的进一步认识(强制转换改变内存,并且删除存在的问题)
生活随笔
收集整理的這篇文章主要介紹了
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的进一步认识(强制转换改变内存,并且删除存在的问题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt工作笔记-3D效果唤出QWidget
- 下一篇: C++ opengl 深度缓冲区