【发布时间】:2017-02-27 18:43:16
【问题描述】:
This page 检查并给出了一个非常清楚的例子来说明如何动态加载和使用一个类,不过有些东西我很难理解:
我明白为什么需要“创建”功能,但为什么需要“销毁”功能?为什么没有将接口析构函数声明为足够纯虚拟?
我做了一个相同的例子,除了:
~polygon() = 0;
triangle 的析构函数是:
triangle::~triangle() {
std::cout << "triangle Dtor is called" <<std::endl;
}
那么当我使用时:
delete poly;
确实显示了消息(linux下的GCC 5.4.0)。
我试图寻找其他示例,但他们都提到并使用了“销毁”功能,没有使用简单的纯虚拟析构函数的示例,这让人相信我在这里遗漏了一些东西,所以..它是什么?
不想使用destroy函数的背景是我想在shared_ptr中使用分配的对象而不关心它的生命周期,使用“destroy”函数会很棘手,因此我需要知道是否有必要。
【问题讨论】:
-
“使用“销毁”功能会很棘手” - 为什么?如果这很棘手,那么您可能做错了什么。
-
您确定要专门从动态对象加载一个类?不只是创建这个类的实例吗? c++ 中的
dynamic_memory和dlopen彼此无关(只是想确保我了解您想要做什么) -
@Hayt "c++ 中的dynamic_memory 和dlopen 没有关系" 但是"内存管理" 和"shared_ptr" 是有关系的吧?
-
无论谁投票关闭此作为Question about pure virtual destructor 的副本,这不是远程副本。这涉及到虚拟析构函数,但它是在问为什么它们对于跨二进制
delete来说是不够的,而不是为什么首先需要它们。
标签: c++ memory-management dlopen dynamic-loading