c++ - 智能指针以及当它们破坏它们指向的对象时

标签 c++

我希望使用一个指向一个对象的智能指针,该对象将被许多不同的对象访问。因此,在所有指向它的指针都被释放之前,我不想破坏它。智能指针将指向一个实例化一对对象的对象,实例化一对对象,等等,这样你就可以通过这个指针访问所有单独的系统对象。但是,假设我在 main 中将智能指针创建为 std::shared_ptr<System> object(new System);然后假设我有另一个对象,所有其他实体都从该对象派生出一个静态 std::shared_ptr,我将其设置为等于上面的对象。静态声明意味着它由编译器管理,而不是基于每个实例。所以假设所有从基类派生的对象都使用这个静态指针来访问系统对象。如果有的话,这个智能指针什么时候被破坏?我需要这个指针在 main 中的指针之前被销毁,谁的销毁应该将引用计数降为 0,销毁它指向的对象。所以我的问题是,静态声明的 std::shared_ptr 何时在事物方案中被破坏。或者即使一个指针被全局声明并被使用,这个对象什么时候被销毁?

基类看起来像这样:

class Base
{
public:
    static shared_ptr<System> m_System;
};

int main()
{
    std::shared_ptr<System> system(new System);
    Base::m_System = system;

    /*
        other stuff
    */ 
    return 0;
}

还有一件事有人可以帮助我,我不太擅长 const-ness,我希望该静态指针是一个不能被派生类更改的常量。但是如果它是 const,我就不能像在 main 中那样初始化它,对吧?那么我将如何声明它以使其为 const,但我仍然可以将它设置为等于最初像这样的指针。

最佳答案

我们有 2 个对象引用,所以,当我们退出 main 函数时 - 我们递减引用计数器,然后销毁静态对象递减引用计数器,当引用计数器等于 0 时,我们的系统对象将被销毁。

关于c++ - 智能指针以及当它们破坏它们指向的对象时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11342493/

相关文章:

C++ Web请求响应

c++ - 通过基类自动进行窗口编程

c++ - 带 "new"的指针和带 "&variable"的指针有什么区别

c++ - 使用 CreateFile 函数创建文件会导致写保护文件

c++ - c++中 vector 和列表的setter和getter

C++ 迭代器、接口(interface)和指针

c++ - ros 到 opencv 图像转换器中的 undefined reference 错误

c++ - 将基本文本添加到 Win32 应用程序,c++

c++ - 设置插入进行奇怪数量的比较

c++ - 如何在我的 UI 中的槽外修改 QLabel 对象?