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

Bạn xử lý việc quản lý bộ nhớ và tín hiệu/khe cắm như thế nào?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 01:14:57 31 4
mua khóa gpt4 Nike

Tôi có một đối tượng phát ra tín hiệu với một đối tượng:

MyObj *obj = this->generateObj();
phát ra newObjSignal(obj);
xóa đối tượng;

Tôi có một hoặc nhiều người kết nối với điều này. Vấn đề là lệnh gọi xóa được gọi trước khi đối tượng nhận được tín hiệu. Tôi nên xử lý việc này như thế nào?

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

sử dụngcon trỏ thông minh, theo cách này, việc quản lý bộ nhớ sẽ được xử lý tự động và bạn sẽ tự tin rằng mình sẽ có:

  1. Không có con trỏ lơ lửng;
  2. Không có rò rỉ bộ nhớ.

Trong trường hợp này, đối với tôi có vẻ nhưstd::shared_ptr<> (或 std::tr1::shared_ptr<> hoặc tăng::shared_ptr<>, nếu bạn không sử dụng C++11) là lựa chọn đúng đắn:

#include  // Dành cho std::shared_ptr<>
// ...
std::shared_ptr obj(this->generateObj());
phát_new_signal(obj);
// xóa obj; // <== Không cần điều này nữa!

Cũng lưu ý rằng hàm xử lý phải chấp nhận std::shared_ptr. thay vì con trỏ thô MyObj* , nhưng bạn không phải thay đổi mã trong các trình xử lý này vì std::shared_ptrcung cấp toán tử-> của tình trạng quá tải.

Xin lưu ý rằng nói chung, sử dụng newViệc sử dụng không được khuyến khích trong C++ 11, hãy sử dụng bất cứ khi nào có thể std::make_shared<>创建chia sẻ_ptrThứ hai. Vì vậy, bạn có thể muốn viết lại tạoObj()hàm thành viên để nó trả về std::shared_ptrthay vì MyObj* , và để nó sử dụng std::make_shared()Khởi tạo đối tượng bên trong.

Để ý:

正如 Geier Như đã chỉ ra trong phần bình luận, Qt có lớp con trỏ thông minh riêngQSharedPointerBạn có thể muốn sử dụng .

Về C++ - bạn xử lý việc quản lý bộ nhớ và tín hiệu/khe cắm như thế nào? , 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/15590577/

31 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