可以借助解引用操作变通地对 std::unique_ptr 进行深拷贝
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 45/100
- Tipo di issue
- Documentazione
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Ferma
- Stack tecnologico
- cpp
- Ambito
- documentation
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
课件这里的写法是复杂又容易出错的,其实我们可以采取下面这样更安全的方式:
//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
- Lingua principale
- C++
- Stelle
- 4.2k
- Fork
- 555
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di parallel101/course
-
访问者设计模式缺少继承Aperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 68/100
parallel101/course#35 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 62/100
parallel101/course#29 ·
-
print.h 没有包含头文件 cstdintAperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 45/100
parallel101/course#39 ·
-
C++17之后才保证new一定对齐。Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 42/100
parallel101/course#38 ·
-
函数返回匿名结构体无法编译Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
parallel101/course#36 · 2 commenti ·
Tutte le issue di parallel101/course
Issue simili
-
Status: Awaiting triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
espressif/arduino-esp32#12984 ·
I maintainer di solito rispondono entro 1 giorno
-
torch_ops/logprob.cu does not compile with the serving container's nvcc (13.3.73); check_torch_ops.py cannot run as shippedForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 72/100
ashhart/TensorFold#535 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 78/100
sudoevolve/EUI-NEO#95 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno