Untuk mendapatkan void *
dari fungsi di CI akan melakukan sesuatu seperti ini (contoh sangat mendasar):
void *get_ptr(size_t size)
{
void *ptr = malloc(size);
return ptr;
}
Bagaimana cara mencapai hasil yang sama saat menggunakan std::unique_ptr<>
?
c++
c
unique-ptr
ZeppRock
sumber
sumber
malloc
C ++ seperti ini. Anda mengembalikan pointer ke memori mentah, yang Anda butuhkan untuk menempatkan objek-objek baru sebelum Anda diizinkan menggunakannya. Jika Anda tidak memiliki alasan yang baik untuk membuat objek di lain waktu daripada saat Anda mengalokasikan memori, maka Anda harus menggunakannew
ataustd::make_unique
yang akan mengalokasikan memori, serta membuat objek yang sesuai. Dalam kedua kasusstd::vector
denganreserve
prob. lebih baik juga. Bahkan jika Anda tidak menggunakan ini,operator new
adalah cara idiomatis mengalokasikan memori, bukanmalloc
.Jawaban:
Anda perlu menentukan deleter khusus agar dapat digunakan
void
sebagaiunique_ptr
argumen tipe seperti itu:sumber
Penyederhanaan jawaban @ RealFresh menggunakan
std::free
langsung sebagai deleter alih-alih membangun functor:Lihat komentar saya pada pertanyaan.
sumber
Pertimbangkan untuk mengembalikan pointer ke char-array:
sumber