2015-12-07 18 views
5

Dường như có hai cách để tạm thời lấy quyền sở hữu của tài nguyên được trỏ đến bởi một weak_ptr:std :: weak_ptr: khóa hoặc shared_ptr constructor?

  1. Sử dụng lock()
  2. Vượt qua weak_ptr đến một constructor shared_ptr

Cả hai tạo ra một shared_ptr, với khóa quay lại nullptr trong trường hợp weak_ptr trống và công cụ xây dựng shared_ptr ném một ngoại lệ.

Vì vậy, câu hỏi đặt ra là: khi nào nên sử dụng cái này hay cái kia? Có nguyên tắc chung hoặc thực tiễn tốt nhất liên quan đến điều này không?

Trả lời

7

sao chép từ http://en.cppreference.com/w/cpp/memory/weak_ptr/lock

Cả hai chức năng này và các nhà xây dựng của std :: shared_ptr có thể được sử dụng để có được quyền sở hữu tạm thời của đối tượng quản lý được gọi bằng một std :: weak_ptr. Sự khác biệt là các nhà xây dựng của std :: shared_ptr ném một ngoại lệ khi std :: đối số weak_ptr của nó là trống, trong khi std :: weak_ptr :: lock() xây dựng một trống std :: shared_ptr.

Điều đó khiến tôi tin rằng bạn chọn cái nào sẽ sử dụng dựa trên việc bạn muốn có ngoại lệ được ném hay không. Hàm khởi tạo có thể được sử dụng khi nó phải hoạt động, trong khi lock có thể được sử dụng khi có thể nó sẽ không hoạt động và bạn có thể kiểm tra.

Các vấn đề liên quan