代码之家  ›  专栏  ›  技术社区  ›  Rick Jim DeLaHunt

什么是智能指针管理的资源,而它们的内存不是由new分配的?

c++
  •  4
  • Rick Jim DeLaHunt  · 技术社区  · 7 年前

    我继续看到“资源”与“动态内存”相反 C++引物第五 :

    默认情况下,用于初始化智能指针的指针必须指向 动态内存,因为默认情况下,智能指针使用 delete 释放 关联的对象。我们可以将智能指针绑定到指针 其他 资源种类 . 然而,要做到这一点,我们必须提供我们自己的 用于替代的操作 删除 .


    如果使用智能指针管理 new


    3 回复  |  直到 7 年前
        1
  •  5
  •   tkausl    7 年前

    new delete

    套接字描述符。


    你可能想用谷歌搜索这个词 RAII 它描述了在C++中自动获取和释放资源的概念。

        2
  •  1
  •   bartop    7 年前

    想象一下以下情况:

    SomeSystemHandle createHandle();
    void freeHandle(SomeSystemHandle *);
    
    std::unique_ptr<SomeSystemHandle, void(*)(SomeSystemHandle *)> handle(
        createHandle(), 
        freeHandle
    );
    

    如你所见 unique_ptr 本身没有管理内存。它管理着一些手柄,但却忽略了这些手柄。这是问题中提到的非内存资源的一个例子。

        3
  •  0
  •   Red.Wave P.W    7 年前

    具体的有用例子是带有OO设计的C API。有一个是这样的:

    std::shared_ptr<std::FILE> myfile{std::fopen("myfile.dat","r"),std::fclose};