我听说过它提到了几次,std::vector在存储原始指针时并不是异常安全的,而且应该使用unique_ptr或shared_ptr替代.
我的问题是,为什么std::vector不是异常安全的,这些类如何解决这个问题?
这std::vector并不是例外,它使用原始指针进行内存管理:
int main()
{
try
{
int* i = new int;
throw "oops, memory leak!";
}
catch (...){}
}
Run Code Online (Sandbox Code Playgroud)
这与vector本身无关,只是这样做是完全相同的问题:
int main()
{
try
{
std::vector<int*> vi;
vi.push_back(new int);
throw "oops, memory leak!";
}
catch (...){}
}
Run Code Online (Sandbox Code Playgroud)
这两个都是通过使用智能指针修复的:
int main()
{
try
{
std::unique_ptr<int> i(new int);
std::vector<std::unique_ptr<int>> vi;
vi.push_back(std::unique_ptr<int>(new int));
vi.push_back(std::move(i));
throw "vector destroys unique_ptr's...which delete their memory";
}
catch (...){}
}
Run Code Online (Sandbox Code Playgroud)
(或者shared_ptr,这更昂贵.您也可以使用Boost中的指针容器.)
| 归档时间: |
|
| 查看次数: |
2337 次 |
| 最近记录: |