C++ 中的私有解構函式


下面將探討 C++ 中解構函式為私有時的具體情況。我們來看一些示例程式碼來了解基本原理。

此程式碼具有私有解構函式,但不會生成任何錯誤,因為沒有建立物件。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class(){
         //private destructor
      }
};
int main() {
}


由於試圖建立一個物件,但編譯器會發現無法訪問解構函式,因此在該程式中,這將導致編譯錯誤。因此,它無法在完成任務後被銷燬。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class obj;
}

輸出

[Error] 'my_class::~my_class()' is private

現在,如果我們為該類建立一個指標,則不會產生錯誤,因為沒有建立實際物件。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj;
}


如果使用 new 運算子建立一個物件,則也不會產生任何錯誤。編譯器認為由程式設計師負責從記憶體中刪除物件。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
}

輸出

現在,如果我們新增 delete 語句來刪除物件,則它將為私有解構函式生成錯誤。

示例

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
   delete obj;
}

輸出

[Error] 'my_class::~my_class()' is private

更新於:2019 年 7 月 30 日

642 次瀏覽

開啟你的 職業

透過完成學習課程獲得認證

開始
廣告
© . All rights reserved.