Abh*_*yal 18 c++ memory smart-pointers c++11 c++14
例如 -
#include <memory>
int main(){
const auto bufSize = 1024;
auto buffer = std::make_unique<char[]>(bufSize);
}
Run Code Online (Sandbox Code Playgroud)
这里的缓冲区是否已经填充了'\0'字符,或者我必须手动填充它以避免垃圾值.
什么可能的方法,这样就std::memset(&buffer.get(), 0, bufSize)足够了?
是的,所有元素都将由std :: make_unique 初始化.
该功能相当于:
Run Code Online (Sandbox Code Playgroud)unique_ptr<T>(new typename std::remove_extent<T>::type[size]())
和
值初始化
这是使用空初始化程序构造变量时执行的初始化.
句法
Run Code Online (Sandbox Code Playgroud)new T (); (2)
和
值初始化的效果是:
3)如果
T是数组类型,则数组的每个元素都是值初始化的;
4)否则,对象是零初始化的.
然后对于每个类型的元素char,它们将被初始化(零初始化)到'\0'.
根据cppreference,是的:
2)构造一个未知范围T的数组。如果T是一个未知范围的数组,则此重载仅参与重载解析。该功能等效于:
Run Code Online (Sandbox Code Playgroud)unique_ptr<T>(new typename std::remove_extent<T>::type[size]()) value initialization ^
我指示的值初始化。
| 归档时间: |
|
| 查看次数: |
5236 次 |
| 最近记录: |