Có vẻ như bạn có thể cần mồi trên khái niệm "biến" trong C++.
Trong C++ mỗi vòng đời của biến được gắn với phạm vi bao gồm của nó. Ví dụ đơn giản nhất của việc này là các biến cục bộ của hàm:
void foo() // foo scope begins
{
UnloadingShip anUnloadingShip; // constructed with default constructor
// do stuff without fear!
anUnloadingShip.Unload();
} // // foo scope ends, anything associated with it guaranteed to go away
Trong mã "anUnloadingShip" trên là mặc định được xây dựng khi hàm foo được nhập (tức là phạm vi của nó được nhập vào). Không cần "mới". Khi phạm vi bao trùm biến mất (trong trường hợp này khi thoát foo), trình phá hủy do người dùng định nghĩa của bạn được tự động gọi để làm sạch UnloadingShip. Bộ nhớ liên quan được tự động dọn dẹp.
Khi phạm vi bao trùm là một ++ lớp C (có nghĩa là để nói một biến thành viên):
class UnloadingBay
{
int foo;
UnloadingShip unloadingShip;
};
cuộc đời gắn liền với các thể hiện của lớp, vì vậy khi chức năng của chúng tôi tạo ra một "UnloadingBay"
void bar2()
{
UnloadingBay aBay; /*no new required, default constructor called,
which calls UnloadingShip's constructor for
it's member unloadingShip*/
// do stuff!
} /*destructor fires, which in turn trigger's member's destructors*/
các thành viên của aBay được xây dựng và sống miễn là "aBay" sống.
Tất cả điều này được tìm ra tại thời gian biên dịch. Không có tham chiếu thời gian chạy nào ngăn ngừa sự phá hủy.Không có cân nhắc nào được thực hiện cho bất kỳ điều gì khác có thể là refer to hoặc point to biến đó. Trình biên dịch phân tích các hàm chúng tôi đã viết để xác định phạm vi, và do đó toàn thời gian, của các biến. Trình biên dịch sẽ thấy phạm vi của một biến kết thúc và bất cứ thứ gì cần thiết để làm sạch biến đó sẽ được chèn vào lúc biên dịch.
"mới", "NULL", (đừng quên "xóa") trong C++ đi vào chơi với con trỏ. Con trỏ là một loại biến chứa địa chỉ bộ nhớ của một số đối tượng. Các lập trình viên sử dụng giá trị "NULL" để chỉ ra rằng một con trỏ không giữ một địa chỉ (nghĩa là nó không trỏ đến bất kỳ thứ gì). Nếu bạn không sử dụng con trỏ, bạn không cần phải suy nghĩ về NULL.
Cho đến khi bạn đã nắm vững cách các biến trong C++ đi vào và ra khỏi phạm vi, hãy tránh các con trỏ. Đó là một chủ đề khác hoàn toàn.
Chúc may mắn!
Đang dỡ tảiShip một chức năng lớp học? Bạn có thể đăng tuyên bố lớp học của mình không? –
No unloadingShip là một thuộc tính của unLoadingBay, là lớp mà isEmpty là một thành viên –
pharma_joe: Là một mẹo chung: Mọi thứ bạn đã học trong Java? Quên đi. Nó sẽ không giúp bạn trong C++. – greyfade