为什么我不能分配给uint_8 []类型的unique_ptr?

1 c++

考虑一下,我已经初始化了unique_ptr这样的:

unique_ptr<uint_8[]> pixels{nullptr};
Run Code Online (Sandbox Code Playgroud)

之后,我决定分配一个新数组:

pixels = new uint_8[10];
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不允许分配一个大小为10*8的新数组.我知道,我可以简单地分配,std::make_unique<uint_8[]>(10)但我只是想了解智能指针.

所以基本上,问题是:

  1. 为什么它不允许nullptr转换为新数组?
  2. nullptrC++ 11中是否有某些特定类型?

Edg*_*jān 7

pixels = new uint_8[10];
Run Code Online (Sandbox Code Playgroud)

这意味着operator=std::unique_ptr将被使用.不过,如果你看看所有的operator= 重载,你会发现,没有服用过载T*std::unique_ptr<T[]>.

调用您需要的方法reset,它会重置std::unique_ptr使用较新值存储的旧值:

pixels.reset(new uint_8[10]);
Run Code Online (Sandbox Code Playgroud)