此代码块是否会导致内存泄漏?

nat*_*han 0 c++ memory

此代码块是否会导致内存泄漏?

char * foo = new char [20];
read(STDIN_FILENO, foo, 20);
string bar;
bar.reserve(20);
bar = foo;
delete[] foo;
Run Code Online (Sandbox Code Playgroud)

我认为它不能,因为我们delete[]用来释放大块的内存.但是,对象bar可能会有所不同.请分享你的观点.

Jar*_*d42 5

如果有任何的string bar;,bar.reserve(20)bar = foo抛出,你有一个memleak.

您可以使用一些智能指针来避免这种情况:

auto foo = std::make_unique<char[]>(20);
Run Code Online (Sandbox Code Playgroud)