cuốn sách gpt4 ai đã làm

Chi tiết về C++ boost::shared_ptr operator[]

In lại Tác giả: Walker 123 Thời gian cập nhật: 28-11-2023 00:43:50 26 4
mua khóa gpt4 Nike

Tài liệu tăng cường nói

Bắt đầu với bản phát hành Boost 1.53, Shared_ptr có thể được sử dụng để giữ con trỏ tới một mảng được phân bổ động.

Tôi có một lớp đơn giản và sử dụng tăng::shared_ptr lưu vào std::deque Mảng:

boost::shared_ptr<> []> someArray;

Tôi muốn một phương thức trả về một deque đã chỉ định từ một mảng chỉ đọc:

std::deque MyClass::myMethod(boost::uint32_t arrayIndex) const{            
trả về someArray[arrayIndex];
}

Cách tiếp cận này có vi phạm tính ổn định của đối tượng không?

câu trả lời hay nhất

Cách tiếp cận này có vi phạm tính hằng định của đối tượng không?

KHÔNG. Đúng. có lẽ. rõ ràng là nó không ảnh hưởngcú pháp Tính ổn định, vì trình biên dịch sẽ không nhắc. Điều này là do hằng số cú pháp yêu cầu đối tượng và các thành viên của nó (đặc biệt là con trỏ thông minh trong trường hợp này) là hằng số. NóKHÔNGYêu cầu con trỏ (tức là mảng deque) phải là hằng số.
ngữ nghĩaSự kiên định là một vấn đề khác. Nếu mảng thuộc về đối tượng của bạn, thì việc thay đổi mảng có nghĩa là thay đổi đối tượng, trong khi có đối tượng const có nghĩa là không làm thay đổi mảng. Bạn có quyền thực thi các hằng số ngữ nghĩa không phải là hằng số cú pháp. Tuy nhiên, trong trường hợp này tôi sẽ không sử dụng chia sẻ_ptr, thay vào đó hãy sử dụng std::vectơ, vì nó đại diện cho quyền sở hữu duy nhất, trong khi chia sẻ_ptr Đó là quyền sở hữu chung - rõ ràng. Mà còn,std::vectơ Được thiết kế để thực thi tính nhất quán ngữ nghĩa, nghĩa là người triển khai thư viện buộc các phần tử chứa phải là const trong một vectơ const.
Tuy nhiên, vì tôi không biết ngữ cảnh của lớp và mảng deque của bạn và vì bạn sử dụng chia sẻ_ptr Làm rõ quyền sở hữu chung,khả thiBạn muốn các hằng số ngữ nghĩa, có thể không.

Nhưng Vì bạn nói rằng bạn muốn quyền truy cập chỉ đọc và bạn đang trả về theo giá trị, quyền truy cập đó sẽ không thay đổi nội dung mảng, vì vậy có thể bạn sẽ ổn. Trả về bằng tham chiếu const cũng có thể phù hợp với nhu cầu của bạn, ngoài ra nó còn tránh được các bản sao tạm thời không cần thiết, có thể rất tốn kém tùy thuộc vào số lượng đối tượng được xếp hàng để lưu trữ

Về chi tiết của C++ boost::shared_ptr operator[], chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/17403393/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress