Nói chung cho C # và đặc biệt cho Unity tôi sẽ khuyên bạn nên chống lại nó ... nhưng nếu bạn thực sự muốn, hoặc có lý do chính đáng, bạn có thể.
Trong C #, bạn sẽ cần làm quen với cái được gọi là mã không an toàn . Đáng sợ?
Trong Unity, bạn sẽ cần bật chế độ biên dịch không an toàn để bạn không thể sử dụng trình phát web nếu bạn đã lên kế hoạch cho việc đó. Bạn có thể đọc thêm ở đây hoặc ở đây .
Vì vậy, về cơ bản C # được thiết kế với Garbage Collector như nhiều ngôn ngữ script. Ý tưởng chung là thử và trừu tượng hóa khái niệm quản lý bộ nhớ để đơn giản hóa sự phát triển. Bạn vẫn có thể bị rò rỉ tài nguyên nếu bạn không vô hiệu hóa các đối tượng của mình. Tôi thực sự không phải là một người ủng hộ rất lớn của các GC và thay vào đó sẽ thích các phương pháp RAII hơn , nhưng đây là thế giới chúng ta đang sống.
Tuy nhiên, hầu hết các nhà phát triển C ++ cũng đồng ý rằng dù sao bạn cũng không nên sử dụng con trỏ trực tiếp và nên sử dụng loại con trỏ thông minh được thiết kế RAII hay còn gọi là con trỏ thông minh . Nếu bạn ở vùng đất C thì con trỏ có khả năng là bản chất thứ hai đối với bạn, nhưng thậm chí sau đó nó giúp trừu tượng hóa chúng ở một mức độ nào đó.
Nếu bạn sử dụng chúng trong C #, hãy lưu ý rằng có một tiềm năng rất thực bạn có thể thêm các lỗ hổng bảo mật hoặc thực sự khó chịu và khó theo dõi các lỗi. Bạn cũng sẽ cần lưu ý rằng bạn phải cẩn thận không tham chiếu các đối tượng có thể được di chuyển bởi GC. Lưu ý việc sử dụng các tuyên bố cố định ở đây .
Bạn cũng có thể sử dụng Con trỏ trong Unity bằng cách viết một plugin gốc . Điều này một lần nữa sẽ loại trừ các bản dựng webplayer, nhưng tính năng HTML5 mới hoạt động dựa trên emscripten vì vậy nếu bạn có kế hoạch sử dụng mà bạn có thể có thể nếu bạn cẩn thận. Các plugin gốc cho phép bạn mở rộng Unity trên cơ sở từng nền tảng. Tôi đã viết một plugin gốc để giao tiếp với một số vi điều khiển thông qua kết nối nối tiếp chẳng hạn.
Vì vậy, để tóm tắt, bạn chắc chắn nên tự hỏi tại sao tôi muốn sử dụng con trỏ trong C # trong Unity. Nếu bạn chỉ muốn làm điều đó cho vui ... Hãy tự mình ra ngoài.
Chỉnh sửa:
Tôi xin lỗi nếu tôi đã xúc phạm bất cứ ai vì tôi biết suy nghĩ của tôi về GC không phải là ý kiến phổ biến ngay bây giờ.
Nếu bạn thực sự đọc câu trả lời của tôi, bạn sẽ lưu ý rằng tôi không gọi C # là ngôn ngữ kịch bản. Tôi so sánh nó với "nhiều ngôn ngữ kịch bản", tuy nhiên, trong ngữ cảnh của Unity, nó được sử dụng rất nhiều làm ngôn ngữ kịch bản. Nó là một phần của DSL to Unity nếu bạn muốn. Thường thì bạn sẽ thấy nó thậm chí còn được gọi là Unity Script trong ngữ cảnh này (phần lớn này liên quan đến thay thế Javascript của Unity cho C #). Nếu bạn đặt LLVM trong đường ống của mình, bạn có thể biên dịch nó thành mã riêng cho nền tảng ... vậy bạn sẽ gọi nó là gì? Vì vậy, thực sự tôi đã không muốn chia tóc ở đây.
Nhiều tài liệu tham khảo tuyệt vời về công nghệ phần mềm chứa đầy ý kiến:
Effective C ++ ,
hiệu quả hơn C ++ ,
C ++ Hỏi đáp ,
hiệu quả C # ,
hiện đại C ++ Thiết kế ,
Design Patterns
... Và không biết bao nhiêu người khác. Tôi không cảm thấy điều này làm cho các cuộc tranh luận trở nên ít đáng tin hơn nếu chúng được theo sau bởi lời giải thích chu đáo.
Tôi thực sự không nói "Đừng sử dụng con trỏ bao giờ !!" . Trong thực tế, tôi vẫn sử dụng chúng trần truồng. Tôi đã nói "nói chung" như trong "thích sử dụng mã an toàn hơn mã không an toàn trong C #". Có những tình huống có thể có lợi và đó là một trong những tính năng thực sự mạnh mẽ của C # để chọn và chọn công cụ của bạn. C # thậm chí cho phép bạn có sự minh bạch trong quy trình GC ở một mức độ nào đó, các ngôn ngữ như Dart không và có thể dẫn đến rò rỉ tài nguyên rất dễ dàng. Chắc chắn nếu bạn là nhà phát triển duy nhất của một dự án nhỏ thì đó không phải là vấn đề. Nếu bạn ở trong một nhóm nói 10+ với hàng trăm ngàn dòng mã thì nó có thể trở nên khó khăn.
Tôi chỉ đơn giản muốn người đọc thực hiện thận trọng khi sử dụng con trỏ trần. Đó là giống như nói rất cẩn thận khi làm việc với điện lưới. Tôi không nói đừng là thợ điện, chỉ là nếu bạn di chuyển sai và không đối xử với nó một cách tôn trọng thì bạn đã chết.
Tôi thích ví dụ được đưa ra bởi Lasse trong đó hiệu suất có thể đã đưa ra nhu cầu.