在物件被析構之後,仍然可以通過該物件的指標訪問相應的靜態方法以及沒有被static關鍵字修飾,但是沒有訪問非靜態成員變數的方法)。
如果訪問了靜態成員變數,則會根據不同的編譯器得到不同的結果,可能是預期之外的值,可能是直接段錯誤。
如果方法a呼叫了方法b,並且方法a和b都是沒有被static關鍵字修飾,且沒有訪問非靜態成員變數的方法,那麼依然可以正常執行。
下面給出專案裡部分示例**,上述3種情況的**很容易構造,此處不贅述。
#include
using
namespace std;
classa;
a::a
(int _a)
a::~a(
)void a::
print()
void a::
printf()
int a::a(
)int
main()
因此,根據以上的測試結果,我懷疑這是編譯器做了特殊處理,將其編譯成了靜態方法。但是我不會檢視彙編**,因此我使用如下**進行測試。
#include
using
namespace std;
classa;
a::a
(int _a)
a::~a(
)void a::
print()
void a::
printf()
int a::a(
)int
main()
//很遺憾編譯通不過。但是這並不能證明我的猜想是錯的。
C 多個物件構造 析構 構造和析構的順序
include 多個物件構造和析構 1 當類中有成員變數是其它類的物件時,首先呼叫成員變數的建構函式,呼叫順序與宣告順序相同 之後呼叫自身類的建構函式 2 析構函式的呼叫順序與對應的構造函式呼叫順序相反 2 類成員中若有const修飾,必須在物件初始化的時候,給const int n 賦值 當類成員...
C 全域性物件構造和析構
注 此為小白引導教程 引入 c 中的全域性物件什麼時候執行建構函式?什麼時候執行析構函式?與區域性物件又有什麼區別?正文 思路是這樣的,我們先寫乙個類,乙個有點簡單 又不簡單 的類 include include using std string using std cout using std e...
C 物件的構造和析構
一 建構函式 1 宣告 1 c 中的類可以定義與類名相同的特殊成員函式,這種與類名相同的成員函式叫做建構函式 語法 classname 2 建構函式在定義時可以有引數 3 沒有任何返回型別的宣告。2 呼叫 自動呼叫 一般情況下c 編譯器會自動呼叫建構函式 手動呼叫 在一些情況下則需要手工呼叫建構函式...