【发布时间】:2020-11-22 02:24:44
【问题描述】:
假设我有一个库 SXY,它可以从文件中给我一张图片:
Picture * pic;
pic=get_picture("directory/file")
我通过多种功能共享它。但是我只想在完成并且所有这些函数都超出范围时才调用 picture_close(pic) 来解除它。 shared_ptr 已经这样做了,但如果我这样做:
shared_ptr<Picture> pic=get_picture("file")
它不会首先编译,因为函数 get_picture 返回一个指向 Picture 而不是 shared_ptr 的指针,并且当它超出范围时它不会调用 picture_close(pic) 这是释放它的正确方法.是否有任何可能的共享指针的自定义形式仅在对这张图片的所有引用都超出范围时才调用某种析构函数?
如果我创建一个对象并在其类的析构函数中调用 picture_close(pic),它将调用析构函数并在复制对象时释放图片,这就是我所拥有的。
【问题讨论】:
-
这里是简短的版本,“我如何附加一个需要自定义解除分配函数以由
std::shared_ptr终身维护的指针?” -
@WhozCraig 是的,就是这样
-
@Sprite 我的意思是有一个类的对象。像 Vector.push_back(obj);在这里,如果向量调整大小,它会更改位置,将所有内容复制到它的新地址并调用该对象的析构函数。我不确定这是否清楚。我将用一些代码编辑问题。
-
@Zeor137 我只是误解了你的问题,抱歉在你解释之前我已经删除了。
-
您可以使用allocate_shared创建shared_ptr。这个方法需要一个Allocator。在您的分配器实现中,您可以使用
get_picture和picture_close进行创建和销毁。
标签: c++ shared-ptr destructor smart-pointers