C++ 中的内存所有权表达
1. 内存所有权问题引入
在编程中,内存所有权的管理是一个关键问题。例如,工厂(Factory)创建的对象,它是否拥有这些对象?当工厂对象被删除时,是否会删除这些对象,还是由客户端来处理?如果我们认为工厂会在适当的时候删除它创建的所有对象,可能会导致内存泄漏。
以下代码示例展示了可能出现的问题:
Widget* w = MakeWidget();
Widget* w1 = Transmogrify(w);
这里就存在疑问, Transmogrify() 函数是否会接管 w 的所有权?在 Transmogrify() 执行完后, w 对象是否还存在?如果为了构造新的 w1 对象而删除了 w ,那么 w 就变成了悬空指针;如果 w 没有被删除,但我们却假设它可能被删除了,就会造成内存泄漏。
另外,使用智能指针时也可能存在不良的内存管理实践。例如:
void Double(std::shared_ptr<std::vector<int>> v) {
for (auto& x : *v) {
x *= 2;
}
};
std::shared_ptr<std::vecto
超级会员免费看
订阅专栏 解锁全文
27

被折叠的 条评论
为什么被折叠?



