可以借助解引用操作变通地对 std::unique_ptr 进行深拷贝
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 1/5
- Thời gian dự kiến
- Dưới một giờ
- Mức phù hợp với người mới
- 45/100
- Loại issue
- Tài liệu
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- cpp
- Lĩnh vực
- documentation
Hướng nghiên cứu
Open 02/19/main.cpp at lines 32-35 and compare the current unique_ptr example with the proposed make_unique dereference approach. Update the course example to show the safer deep-copy form, then verify that the surrounding example still reads correctly and handles the intended pointer state.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
课件这里的写法是复杂又容易出错的,其实我们可以采取下面这样更安全的方式:
//C* raw_p = p.get(); // no need
func(std::make_unique<C>(*p)); // deep copy
p->do_something(); // OK, run normally
虽然 std::unique_ptr 删除了 copy constructor 和 copy assignment operator ,但其实我们可以借助解引用操作变通地对 std::unique_ptr 进行拷贝。
deep copy 示例如下:
std::unique_ptr<std::string> up1(std::make_unique<std::string>("Good morning"));
// copy construct!
std::unique_ptr<std::string> up2(std::make_unique<std::string>(*up1));
// safe copy construct!
std::unique_ptr<std::string> up3(up1 ? std::make_unique<std::string>(*up1) : nullptr);
// copy assignment!
up2 = std::make_unique<std::string>(*up1);
// safe copy assignment!
up3 = up1 ? std::make_unique<std::string>(*up1) : nullptr;
其它的例证:
- Google tensorflow : unique_ptr - in copy assignment operator
- Microsoft terminal : unique_ptr - in copy constructor
- 《Effective Modern C++》,Item22,其中的 class Widget 的 copy constructor 和 copy assignment operator 的实现,见 EffectiveModernCppChinese/item22.md · GitHub
- Ngôn ngữ chính
- C++
- Star
- 4.2k
- Fork
- 555
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của parallel101/course
-
访问者设计模式缺少继承Đang mở
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 68/100
parallel101/course#35 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 62/100
parallel101/course#29 ·
-
print.h 没有包含头文件 cstdintĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 45/100
parallel101/course#39 ·
-
C++17之后才保证new一定对齐。Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 42/100
parallel101/course#38 ·
-
函数返回匿名结构体无法编译Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
parallel101/course#36 · 2 bình luận ·
Tất cả issue của parallel101/course
Issue tương tự
-
needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
flashinfer-ai/flashinfer#6212 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug graphics
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
FlaxEngine/FlaxEngine#4295 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 2 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
Algorithmiq/monoprop#390 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
docs
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 70/100
leethomason/tinyxml2#1097 ·