【问题标题】:Can I use smart pointers as class members in C++?我可以在 C++ 中使用智能指针作为类成员吗?
【发布时间】:2021-03-22 07:05:39
【问题描述】:

我了解到唯一指针在作用域的末尾“死亡”。那么它在班级成员中是如何运作的呢?共享指针有用吗?

【问题讨论】:

  • 是的。也建议使用它们。
  • 虽然对象生命周期和词法范围是相互关联的,但它们并不是一回事。你担心班员“死去”,但你考虑过它什么时候“复活”吗?

标签: c++ class shared-ptr smart-pointers unique-ptr


【解决方案1】:

绝对是的!您可以在类中使用它们作为成员。

当它用作成员变量时,唯一指针的生命周期就是对象本身的生命周期(除非您明确释放它们)。当对象被销毁时,唯一指针和所有智能指针都会释放它的内存。

【讨论】:

  • "所有智能指针都会释放它的内存" shared_ptr 拥有的内存不一定会被释放,因为其他shared_ptrs 可能仍然有同一内存的所有权。
【解决方案2】:

我可以在 C++ 中使用智能指针作为类成员吗?

是的。除了根本无法实例化的类之外,几乎任何类都可以成为成员。

我了解到唯一指针在作用域的末尾“死亡”。

所有自动变量在作用域结束时“死亡”。此属性并非特定于智能指针。示例:

{
    int i = 42;
} // i "dies" here

使智能指针与裸指针不同的一点不是它们在作用域的末尾“死亡”(因为裸指针也“死亡”),而是智能指针在“死亡”时做了什么。

当超级对象“死亡”时,一个非静态成员变量“死亡”。

共享指针有用吗?

是的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    • 2011-12-25
    • 2021-03-09
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多