0

我希望使用一个智能指针指向一个对象,该对象将被很多不同的对象访问。因此,在所有指针都释放到它之前,我不想破坏它。智能指针将指向一个实例化几个对象的对象,该对象实例化几个对象,依此类推,这样您就可以通过这个指针访问所有单独的 System object。但是,假设我在 main 中创建智能指针为std::shared_ptr<System> object(new System);然后假设我有另一个对象,所有其他实体都从该对象派生出一个静态 std::shared_ptr ,我将其设置为等于上面的对象。静态声明意味着它由编译器管理,而不是基于每个实例。所以假设所有从基类派生的对象都使用这个静态指针来访问 System object。这个智能指针何时被破坏?我需要在 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,但我仍然可以将它设置为最初像这样的指针。

4

2 回答 2

1

我们有 2 个对象引用,因此,当我们退出主函数时 - 我们减少引用计数器,然后销毁静态对象减少引用计数器,当引用计数器等于 0 时,我们的 System object 将被销毁。

于 2012-07-05T10:38:38.283 回答
1

这个智能指针何时被破坏?

像所有静态对象一样,它在main退出后被销毁。

我需要在 main 中的那个指针之前销毁这个指针,谁的销毁应该将引用计数降至 0,从而销毁它指向的对象。

在这种情况下,也许您希望静态指针为weak_ptr. 它不会参与保持对象活动的引用计数,但只要有指向它的共享指针,它就会允许访问该对象。main()然后,一旦其中的指针(以及该指针的任何其他副本)超出范围,该对象将被销毁。

或者,可能值得考虑避免静态对象,而是在其中实例化对象main()并将引用传递给任何需要它的对象。这避免了与静态对象相关的各种问题(特别是它们的初始化顺序),也使程序的依赖结构更加清晰。在这种情况下,您可能根本不需要智能指针,因为对象的生命周期与程序的生命周期绑定。

于 2012-07-05T10:52:07.487 回答