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

c++ - unique_ptr 的段错误

In lại Tác giả: Walker 123 更新时间:2023-11-28 01:15:03 hai mươi bốn 4
mua khóa gpt4 Nike

我正在尝试使用 unique_ptr 而不是自己分配内存。我有以下代码:

class Album {
...
công cộng:
Add(Song* song);
...
}

void func(){
...
std::unique_ptr album = std::unique_ptr{new Album()};
std::unique_ptr song = std::unique_ptr{new Song(soundtrack.data(), soundtrack.length())};
album->Add(song.get());
...
}

我得到该行的段错误:

album->Add(song.get());

我尝试了多种变体来获取指针,包括 std::move 和 make_unique,但也许我不明白 unique_ptr 的工作原理如何足以解决它。

Có ý tưởng gì không?

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

您提供的代码可以正常编译和运行 - 因此您未提供的部分一定有问题 - 我怀疑 Add() 中的代码或其返回类型,或稍后使用指针作为necktschnagge怀疑。工作示例在 gdbonline 上:
https://onlinegdb.com/r1oyXGK2S

首先我问这个问题,您希望通过使用 std::unique_ptr 获得什么优势。考虑到一个独特的指针并不能保证有一个指针 - 在 Add() 中你必须检查 nullptr!我认为从你的用法来看,你不想使用 std::unique_ptr:

关键是,std::unique_ptr 具有唯一的所有权。其中之一:

  • func()::局部作用域
  • album::Add()::parameter_scope

拥有它。

由于您没有使用 std::move() 所有权保留在 func() 中,并将在 func( )。为避免这种情况,您不妨使用 song.release()(nhìn thấy cpp-reference).

关于c++ - unique_ptr 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58970041/

hai mươi bốn 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