c類函數詳細教程?首先我們來看一下下面這個程序的輸出:,下面我們就來說一說關于c類函數詳細教程?我們一起去了解并探讨一下這個問題吧!
首先我們來看一下下面這個程序的輸出:
#include <iostream>
using namespace std;
class Test {
private:
~Test() {}
};
int main()
{
}
上面的程序可以編譯并正常運行。因此,我們可以說:不是創建私有析構函數編譯器錯誤。
現在,您對下面的程序怎麼說?
#include <iostream>
using namespace std;
class Test {
private:
~Test() {}
};
int main()
{
Test t;
}
上面的程序編譯失敗。編譯器注意到,因為析構函數是私有的,所以無法破壞局部變量“ t”。
現在,下面的程序呢?
#include <iostream>
using namespace std;
class Test {
private:
~Test() {}
};
int main()
{
Test* t;
}
上面的程序工作正常。沒有正在構造的對象,程序僅創建“ Test *”類型的指針,因此不會破壞任何内容。
接下來,下面的程序呢?
#include <iostream>
using namespace std;
class Test {
private:
~Test() {}
};
int main()
{
Test* t = new Test;
}
上面的程序也可以正常工作。當使用動态内存分配創建某些内容時,程序員有責任将其删除。因此,編譯器不會打擾。
在将析構函數聲明為私有的情況下,也可以使用malloc()函數創建該類的實例。在下面的程序中實現相同。
#include <bits/stdc .h>
using namespace std;
class Test {
public:
Test() // Constructor
{
cout << "Constructor called\n";
}
private:
~Test() // Private Destructor
{
cout << "Destructor called\n";
}
};
int main()
{
Test* t = (Test*)malloc(sizeof(Test));
return 0;
}
但是,以下程序編譯失敗。當我們調用delete時,将調用析構函數。
#include <iostream>
using namespace std;
class Test {
private:
~Test() {}
};
int main()
{
Test* t = new Test;
delete t;
}
我們在上面的程序中注意到,當一個類具有私有析構函數時,隻能創建該類的動态對象。以下是一種使用私有析構函數創建類并具有作為類朋友的功能的方法。該功能隻能删除對象。
#include <iostream>
// A class with private destuctor
class Test {
private:
~Test() {}
friend void destructTest(Test*);
};
// Only this function can destruct objects of Test
void destructTest(Test* ptr)
{
delete ptr;
}
int main()
{
// create an object
Test* ptr = new Test;
// destruct the object
destructTest(ptr);
return 0;
}
私有析構函數的用途是什麼?
每當我們想要控制類對象的銷毀時,我們都将析構函數設為私有。對于動态創建的對象,可能會發生以下情況:将指向該對象的指針傳遞給函數,然後該函數删除該對象。如果在函數調用後引用了對象,則該引用将變得懸而未決。
以上就是今天的全部内容了。每日分享小知識,希望對你有幫助~
另外如果你想更好的提升你的編程能力,學好C語言C 編程!彎道超車,快人一步!筆者這裡或許可以幫到你~
編程學習書籍分享:
編程學習視頻分享:
分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比自己琢磨更快哦!
點擊下方【了解更多】獲取更多免費學習資料幫助你學習成長哦~
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!