您是否需要告诉智能指针,当您完成它们时
Do you need to tell Smart Pointers when you are done with them
对于智能指针,您是否仍然需要释放/重置它们以确保释放内存?还是可以让他们超出范围?
对于类成员智能指针,在释放内存、悬空指针方面,行为是否有任何差异?析构函数是否应始终释放这些变量?
class Foo
{
public:
Foo()
{
myUPtr = std::unique_ptr<int>(new int);
mySPtr = std::shared_ptr<int>(new int);
}
~Foo()
{
// Should these smart pointers be released? Or will falling out of scope/deletion release the memory?
myUPtr.release();
mySPtr.reset();
}
private:
std::unique_ptr<int> myUPtr;
std::shared_ptr<int> mySPtr;
};
int main()
{
// When each of the below variables fall out of scope is there any difference in memory release?
Foo f;
std::unique_ptr<Foo> uFoo(new Foo);
std::shared_ptr<Foo> sFoo(new Foo);
std::unique_ptr<int> uPtr(new int);
std::shared_ptr<int> sPtr(new int);
// Will all these smart pointers be released automatically?
// No need to call .release()/.reset() on any member and non-member smart pointers?
return 0;
}
是否仍需要释放/重置它们以确保释放内存?
不
还是可以让他们超出范围?
是的
析构函数是否应始终释放这些变量?
不
使智能指针如此智能和强大的一件事是,您不再需要担心手动管理内存。
仅供参考,std::unique_ptr::release
实际上将减轻智能指针的职责:它返回一个原始指针,然后您需要手动管理该指针。
相关文章:
- 新分配指向函数的指针是否合法?
- 在函数结束后使用指向变量的指针是否安全?
- C++ 返回指向函数内定义的静态数组的指针是否有效?
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 'this'指针是否可以在 c++ 标头声明中使用?
- C++ 在向量中使用指针是否可能导致指针悬空?
- 唯一指针是否在堆或堆栈上分配内存?
- 将基本实例指针强制转换为派生实例指针是否合法?(实例不是派生实例)
- 当向量增长时,指向向量元素的C++指针是否无效
- 如何判断指针是否是指向数组的指针
- 在类方法中使用 "this" 指针是否是一种好的做法?
- 如何知道指针是否已在其他地方释放
- 结构成员指针是否自动初始化为零?
- 为静态类创建指向对象的指针是否合法?
- 新的自动关键字指针是否会自行删除?
- 创建指针是否超过非数组指针的末尾,而不是从 C++17 中的一元运算符和未定义的行为派生?
- 检查指针是否指向矢量元素
- 如何创建一个带锁的指针数组并检查指针是否空闲?
- 在映射中插入更多元素后,指向 QMap 中元素的指针是否仍然有效?