Computer >> Máy Tính >  >> Lập trình >> C ++

Private Destructor trong C ++

Ở đây chúng ta sẽ thấy điều gì sẽ xảy ra nếu các hàm hủy là private trong C ++. Hãy cho chúng tôi xem một số mã ví dụ để có ý tưởng.

Mã này có hàm hủy riêng, nhưng nó sẽ không tạo ra bất kỳ lỗi nào vì không có đối tượng nào được tạo.

Ví dụ

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


Trong chương trình này, điều này sẽ tạo ra lỗi biên dịch, vì chúng tôi đang cố gắng tạo một đối tượng, nhưng trình biên dịch có thể nhận thấy rằng trình hủy không thể truy cập được. Vì vậy nó không thể bị phá hủy sau khi hoàn thành nhiệm vụ.

Ví dụ

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

Đầu ra

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

Bây giờ nếu chúng ta tạo một con trỏ cho lớp đó, thì nó sẽ không tạo ra lỗi vì không có đối tượng thực sự nào được tạo.

Ví dụ

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


Nếu một đối tượng được tạo bằng toán tử mới, thì cũng không có lỗi nào được tạo ra. Trình biên dịch nghĩ rằng lập trình viên có trách nhiệm xóa đối tượng khỏi bộ nhớ.

Ví dụ

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

Đầu ra

 

Bây giờ nếu chúng ta thêm câu lệnh delete để xóa đối tượng, nó sẽ tạo ra lỗi cho hàm hủy riêng.

Ví dụ

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

Đầu ra

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