gpt4 book ai didi

c++ - 在 C++ 中动态加载的库分配的基类指针上调用 delete 的安全性

转载 作者:行者123 更新时间:2023-11-30 01:08:31 24 4
gpt4 key购买 nike

在指向由动态加载库分配的堆对象的基类指针上调用 delete 是否安全?该库和客户端都是由同一个编译器 (GCC) 构建的。

最佳答案

删除指针是安全的当且仅当

  • 基类的析构函数是虚函数。
  • 指针由 new 返回(不是 new[],不是 malloc,不是 mmap,. ..)
  • 您是指针的唯一所有者。换句话说:如果没有其他代码(在 dll 内部或外部)将使用或销毁指向的对象。

就标准而言,库必须与定义分配函数的相同版本的运行时库链接。同样的要求适用于静态链接在一起的单独目标文件。

从技术上讲,内存分配函数的多个不同实现违反了一个定义规则,但是使用标准库扩展语言的 C++ 实现可能会扩展语言以允许这些函数的多个不同实现。如果您使用的实现是这种情况,那么取消分配由共享库分配的内存可能不安全,除非您可以证明库和删除对象的代码使用了相同的版本。


无论安全与否,提供返回资源(例如动态内存)的 API 而不是负责释放这些资源的 API 并不是一个好主意。

关于c++ - 在 C++ 中动态加载的库分配的基类指针上调用 delete 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42397577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com