2009-03-24 22 views

Trả lời

36

Thứ hai là sai!

Bạn có thể sử dụng

MyClass object; 

Điều đó sẽ làm việc.

Bây giờ, liên quan đến cách chọn giữa hai khả năng này, nó chủ yếu phụ thuộc vào thời gian đối tượng của bạn nên sống. Xem there để biết câu trả lời kỹ lưỡng.

8

Toán tử new trả về con trỏ tới đối tượng mà đối tượng tạo, vì vậy biểu thức Myclass object = new Myclass(); không hợp lệ.

Các ngôn ngữ khác không có con trỏ rõ ràng như C++ để bạn có thể viết câu như Myclass object = new Myclass();, nhưng trong C++, điều này không thể thực hiện được. Kiểu trả về là new Myclass(); là một con trỏ đến đối tượng Myclass, tức là Myclass *.

7

Ví dụ đầu tiên tạo một con trỏ tới MyClass và khởi tạo nó để trỏ đến kết quả của toán tử mới.

Thứ hai có thể sẽ không biên dịch, vì nó đang cố gắng tạo đối tượng MyClass và gán nó cho con trỏ MyClass. Điều này có thể làm việc trong trường hợp không chắc rằng bạn có một hàm tạo MyClass chấp nhận một con trỏ MyClass.

3

Điều đầu tiên là chính xác.

Thông thường thứ hai sẽ không biên dịch. Và nếu nó biên dịch thì lớp đó đang thực hiện một số thứ phức tạp trong một toán tử khởi tạo/gán. Và nó có lẽ là bộ nhớ bị rò rỉ.

53
Myclass *object = new Myclass(); //object is on the heap 
Myclass object; //object is on the stack 

Bạn tạo đối tượng trên heap nếu bạn dự định sử dụng chúng trong một khoảng thời gian dài và bạn tạo đối tượng trên ngăn xếp trong một thời gian ngắn (hoặc phạm vi).

6

Dòng mã đầu tiên của bạn là chính xác trong khi dòng mã thứ hai không chính xác.

Myclass object=new Myclass(); //Incorrect code 

Mã trên không chính xác là new Myclass(); trả về con trỏ tới lớp và Đối tượng Myclass; khai báo đối tượng của lớp và bạn đang cố gắng gán con trỏ cho lớp cho đối tượng của lớp, đó là không chính xác.

Dòng mã đầu tiên của bạn là chính xác. Nhưng điều này tuyên bố con trỏ đến lớp không phải là đối tượng của lớp.

Myclass *object = new Myclass(); //declares pointer to class. 

Để khai báo đối tượng của lớp bạn nên viết mã sau.

Myclass object; //declares object of class Myclass 

Nhưng bạn nên lưu ý rằng cách truy cập thành viên lớp bằng cách sử dụng con trỏ đến lớp và sử dụng đối tượng lớp khác nhau. sau đây là mã để truy cập các thành viên của lớp.

pointer_to_class->member; // accessing class member using pointer to class 
object.member;    //accessing class member using object of class 
10

Dòng đầu tiên của bạn chính xác 100%. Thật không may, bạn không thể tạo đối tượng với dòng thứ hai của bạn bằng C++. Có hai cách để tạo/tạo một đối tượng trong C++.

Đầu tiên là:

MyClass myclass; // if you only need to call the default constructor  
MyClass myclass(12); // if you need to call constructor with parameters* 

một Thứ hai là:

MyClass *myclass = new MyClass();// if you only need to call the default constructor 
MyClass *myclass = new MyClass(12);// if you need to call constructor with parameters 

Trong C++ nếu bạn sử dụng các từ khóa new, đối tượng sẽ được lưu trữ trong heap. Nó rất hữu ích nếu bạn đang sử dụng đối tượng này trong một khoảng thời gian dài và nếu bạn sử dụng phương pháp đầu tiên, nó sẽ được lưu trữ trong ngăn xếp. nó chỉ có thể được sử dụng trong khoảng thời gian ngắn. Lưu ý: nếu bạn sử dụng từ khóa new, hãy nhớ nó sẽ trả về giá trị con trỏ. Bạn nên khai báo tên với *. Nếu bạn sử dụng phương pháp thứ hai, nó không xóa đối tượng trong heap. Bạn phải tự xóa bằng cách sử dụng delete từ khóa:

delete myclass; 
Các vấn đề liên quan