代码之家  ›  专栏  ›  技术社区  ›  Ali Sepehri-Amin

全局范围内的智能指针

  •  5
  • Ali Sepehri-Amin  · 技术社区  · 7 年前

    我的cpp文件(全局变量)顶部有一个智能指针:

    std::unique_ptr<DATA_READ> smartPT(new DATA_READ);
    

    如果智能指针在全局范围内声明,会发生什么?我知道函数中的智能指针会在函数结束后自动删除和释放内存,但在多个函数中使用的全局范围智能指针呢?

    4 回复  |  直到 7 年前
        1
  •  1
  •   Naseef Chowdhury    7 年前

    它将在程序终止期间释放分配的内存。然而,将智能指针作为全局变量不是一个好主意。

        2
  •  1
  •   MJ_Wesson    7 年前

    除非采取特定措施释放内存,否则内存将在程序的整个生命周期内保持分配状态。实际上,智能指针的作用域就是函数“main()”的作用域。这是来自 cplusplus.com

    unique\u ptr对象在其自身被销毁时,或在其值通过赋值操作或显式调用unique\u ptr::reset发生更改时,自动删除其管理的对象(使用删除器)。

        3
  •  0
  •   MarxNotDead    7 年前

    由于这是一个具有静态持续时间的变量,因此内存将在加载此代码时分配,通常在应用程序启动时分配,并在应用程序完成时释放。 如果在函数中使用它,通常应该分配它,除非它已在另一个函数中重置。

    显然,考虑到动态加载的库,会产生一些影响。

        4
  •  -1
  •   Costantino Grana    3 年前

    智能指针将在程序结束时与所有其他对象一样被销毁。因此,当调用析构函数时,指针将被删除。她你得到了一个例子 甚至不接近 一个真正的智能指针,但它给出了一个想法:

    #include <iostream>
    using namespace std;
    
    template <typename T>
    struct example {
        T* p_;
        example(T* p): p_{p} {
            cout << "example(T* p)\n";
        }
        ~example() {
            cout << "~example()\n";
            delete p_;
        }
    };
    
    int main() {
        cout << "start main\n";
        example<int> p{new int};
        cout << "end main\n";
        return 0;
    }
    

    https://ideone.com/rOtQY9

    无论如何,我无法使用全局智能指针