Tôi biết có một toán tử xóa mà tôi không quan tâm ở đâu đó. Tôi chỉ tự hỏi, wow, nó đã hoạt động. Đối số "kích thước" đến từ đâu?`Kích thước` đến từ đâu?
#include<iostream>
#include<string>
class Base {
public:
Base() { }
void *operator new(unsigned int size, std::string str) {
std::cout << "Logging an allocation of ";
std::cout << size;
std::cout << " bytes for new object '";
std::cout << str;
std::cout << "'";
std::cout << std::endl;
return malloc(size);
}
private:
int var1;
double var2;
};
int main(int argc, char** argv){
Base* b = new ("Base instance 1") Base;
}
Dưới đây là kết quả:
Logging một phân bổ 16 byte cho đối tượng mới 'cơ sở dụ 1'
Bạn đang xem một số f các tính năng C++ tiên tiến. Là một người mới bắt đầu, bạn nên tập trung vào những thứ cơ bản hơn. – user763305
Hãy coi chừng, kích thước của một đối tượng và số lượng byte được phân bổ có thể khác nhau do căn chỉnh, đệm và các chi phí khác! Đặc biệt đúng đối với mảng. Đừng cho rằng đối tượng được đặt tại địa chỉ mà bạn đã trả về trong toán tử mới của bạn, vì nó có thể không được! – Frigo
Thực ra từ tiêu chuẩn 5.3.4/12: "kết quả T mới trong cuộc gọi của toán tử mới (sizeof (T))". Nếu bạn muốn bất kỳ sự liên kết đặc biệt nào, bạn sẽ phải tự cung cấp nó và đối tượng sẽ được đặt tại địa chỉ được trả lại từ mới. –