怎么new一个指针_C++知识点 34:指针运算符重载 -- 智能指针
#define _CRT_SECURE_NO_WARNINGS
#include
using namespace std;
// 平常可能遇到一個問題
class Test
{
public:
Test() {
cout << "默認構造函數被調用了" << endl;
}
~Test() {
cout << "析構函數被調用了" << endl;
}
public:
int m_Age;
};
void test01()
{
Test t1; // 此時調用了系統默認的構造函數和析構函數
Test* t2 = new Test; // 在堆區new一個對象,此時只會調用默認構造函數! 不會調用析構函數
delete t2; // 只有在delete后才會調用析構函數 // 問題:如果 new 和 delete 中間代碼量特別大,有的人就極可能忘記delete
// 解決:使用智能指針去托管析構函數的調用
}
****************************************************************************************
// 智能指針 SmartPoint
class Person
{
public:
Person() {
this->m_Age = 18; // 默認構造函數 對年齡初始化
}
void showAge(){
cout << "Age= " << this->m_Age << endl; // 查看年齡的成員函數
}
public:
int m_Age;
};---------------------------------------------------------------------------------------------------
// 創建智能指針類:維護 new 出來的 Person*class SmartPoint
{
public: // 解決自動delete問題
SmartPoint(Person* person) // 參數是通過 new Person 得到的
{
this->person = person; // 有參構造函數作用:初始化,用于接收 new 出來的 Person *
}
~SmartPoint() // 實例化了SmartPoint對象, 就意味著會調用析構函數, 那么就意味著會自動delete
{
// 釋放掉堆區對象
if (this->person != NULL)
{
delete this->person;
this->person = NULL;
}
}
public: // 解決 ? 和 * 重載問題
// 指針 ? 運算符的重載 // 傳入的是 person (Person* person = new Person)
Person* operator->()
{
return this->person;
}
// 解引用 * 運算符重載 // 傳入的是 person (Person* person = new Person)
Person& operator*()
{
return *person;
}---------------------------------------------------------------------------------------------------
public:
Person* person; // 維護一個new出來的對象指針
};
****************************************************************************************
void test02()
{
SmartPoint sp(new Person); // 調用SmartPoint的有參構造, 本質是new的一個Person類的指針: person /*
說明:
正常: Person* p = new Person // p 是指針,用法 p->
采用指針指針維護, SmartPoint sp(new Person) // sp是類,用法 sp.
需求: sp指針化 // sp.的操作 變為 sp-> // 也可以解引用在化為類
解決:指針運算符的重載( 2方面: sp.的操作 變為 sp-> 以及 *(sp))
*/
sp->showAge(); // 注意, sp->返回值為指針,其實應該寫成sp->->showAge(), 但系統做了優化
(*sp).showAge(); // sp已經指針化, *sp還原成類,使用.操作
}
總結
以上是生活随笔為你收集整理的怎么new一个指针_C++知识点 34:指针运算符重载 -- 智能指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp搜索文件_Windows10下搭建
- 下一篇: 算法学习入门书籍 -- 2022.02.