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

Cách di chuyển một đối tượng sang nullptr trong C++

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 08:24:41 25 4
mua khóa gpt4 Nike

Tôi đang nghĩ đến một trường hợp sử dụng kỳ lạ khi tôi muốn di chuyển một đối tượng sang nullptr. Có lẽ tôi nên đưa ra một đoạn mã:

cặp đối tượng lớp {
public:
Objpair(Obj&& a, Obj&&b): thứ nhất(&a), thứ hai(&b) { }
private:
Obj* đầu tiên;
Obj* giây;
};

Vấn đề là khi a và b vượt quá phạm vi, con trỏ thứ nhất và thứ hai sẽ bị treo lơ lửng. Nếu tôi có thể di chuyển đối tượng a lên con trỏ đầu tiên, sẽ không có vấn đề về phạm vi và phạm vi kép. Nếu thành viên đầu tiên được khai báo là Obj chứ không phải là con trỏ Obj*, thì trực tiếp first(std::move(a)) sẽ thực hiện công việc. Tôi phải làm điều gì đó sai ở đây. Tôi đang cân nhắc việc di chuyển thay vì sao chép vì tôi đang cố gắng chuyển quyền điều khiển từ đối tượng khác sang đối tượng hiện tại và cải thiện hiệu suất.

Việc sử dụng phiên bản con trỏ là do tôi đang xem xét hành vi đa hình của các đối tượng thành viên.

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

Những gì bạn có thể làm là từ các thông số của bạn di chuyển cấu trúcĐối tượng như hình dưới đây:

cặp đối tượng lớp {
public:
Đối tượng(Obj&& a, Obj&& b)
: đầu tiên(mới Obj(std::move(a)))
, giây(new Obj(std::move(b)))
{}

private:
Obj* đầu tiên;
Obj* giây;
};

Tôi khuyên bạn nên sử dụngstd::unique_ptr:

cặp đối tượng lớp {
public:
Đối tượng(Obj&& a, Obj&& b)
: đầu tiên(std::make_unique(std::move(a)))
, giây(std::make_unique(std::move(b)))
{}

private:
std::unique_ptr trước;
std::unique_ptr giây;
};

Về cách di chuyển một đối tượng sang nullptr trong C++, 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/55484089/

25 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