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

Sự khác biệt giữa toán tử mới và toán tử mới trong C ++?

Trong C ++ khi chúng ta muốn tạo một đối tượng mới thì chúng ta phải tạo một khối nhớ vào trong bộ nhớ, sau đó cũng gọi hàm tạo để khởi tạo khối bộ nhớ. Chúng ta có thể tạo phần tử bộ nhớ bằng cách sử dụng từ khóa mới. Toán tử mới này đang thực hiện hai nhiệm vụ liên tiếp. Nhưng toán tử mới chỉ tạo không gian bộ nhớ.

Từ khóa mới

Toán tử mới là một loại toán tử đặc biệt, biểu thị một yêu cầu phân bổ bộ nhớ trên phần heap. Khi có đủ bộ nhớ, thì chỉ các toán tử mới sẽ kích hoạt bộ nhớ thành biến con trỏ. Khi chúng tôi tạo một đối tượng bằng một từ khóa mới thông thường, nó sẽ thực hiện hai tác vụ liên tiếp

  • ? Phân bổ khối bộ nhớ cho đối tượng vào phần heap
  • ? Gọi hàm tạo để khởi tạo khối bộ nhớ.

Mã mẫu

#include <iostream>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

Đầu ra

Constructor called!

Nhà khai thác mới

Toán tử mới là một hàm. Hàm này được sử dụng để nạp chồng cho toán tử mới. Sử dụng nó, chúng ta có thể cấp phát khối bộ nhớ thô. Điều này tương tự về mặt khái niệm với các hàm malloc () hoặc calloc (). Hàm này không gọi hàm tạo nên bộ nhớ không được khởi tạo. Tuy nhiên sau khi quay lại con trỏ từ phương thức được nạp chồng này, trình biên dịch sẽ gọi hàm tạo sau đó.

Mã mẫu

#include <iostream>
#include <cstdlib>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
   void *operator new(size_t size) {
      cout << "Call Operator New"<<endl;
      void *p = malloc(size);
      return p;
   }
};
int main() {
   Box* myBox = new Box;
}

Đầu ra

Call Operator New
Constructor called!