草庐IT

Destructor

全部标签

c++ - 默认析构函数可以自动生成为虚拟析构函数吗?

默认析构函数可以自动生成为虚拟析构函数吗?如果我定义了一个基类但没有默认析构函数,是否有默认的虚拟析构函数自动生成? 最佳答案 没有。使方法虚拟化是有成本的,而C++的理念是不让您为未明确声明要使用的东西付费。如果虚拟析构函数会自动生成,那么您将自动付出代价。为什么不直接定义一个空的虚拟析构函数? 关于c++-默认析构函数可以自动生成为虚拟析构函数吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - 默认析构函数可以自动生成为虚拟析构函数吗?

默认析构函数可以自动生成为虚拟析构函数吗?如果我定义了一个基类但没有默认析构函数,是否有默认的虚拟析构函数自动生成? 最佳答案 没有。使方法虚拟化是有成本的,而C++的理念是不让您为未明确声明要使用的东西付费。如果虚拟析构函数会自动生成,那么您将自动付出代价。为什么不直接定义一个空的虚拟析构函数? 关于c++-默认析构函数可以自动生成为虚拟析构函数吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - C++ 中的 golang 样式 "defer"

这个问题在这里已经有了答案:Whatisstandarddefer/finalizerimplementationinC++?(9个回答)关闭7年前。我正在阅读有关go语言的defer陈述。它允许您指定函数结束时要执行的操作。例如,如果你有一个文件指针或资源,而不是用每个可能的返回路径编写free/delete,你只需要指定一次defer函数。看起来类似的东西最终可能会出现在C++中(Whatisstandarddefer/finalizerimplementationinC++?,Willtherebestandardizationofscopeguard/scopeexitidio

c++ - C++ 中的 golang 样式 "defer"

这个问题在这里已经有了答案:Whatisstandarddefer/finalizerimplementationinC++?(9个回答)关闭7年前。我正在阅读有关go语言的defer陈述。它允许您指定函数结束时要执行的操作。例如,如果你有一个文件指针或资源,而不是用每个可能的返回路径编写free/delete,你只需要指定一次defer函数。看起来类似的东西最终可能会出现在C++中(Whatisstandarddefer/finalizerimplementationinC++?,Willtherebestandardizationofscopeguard/scopeexitidio

c++ - 创建对象 : with or without `new`

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whatisdifferencebetweeninstantiatinganobjectusingnewvs.without这可能是一个基本问题,并且可能已经被问过(例如,here);但我还是不明白。所以,让我问一下。考虑以下C++类:classObj{char*str;public:Obj(char*s){str=s;cout以下代码片段有什么区别:Objo1("Hi\n");和Obj*o2=newObj("Hi\n");为什么前者调用析构函数,而后者不调用(没有显式调用delete)?哪个更受欢迎?

c++ - 创建对象 : with or without `new`

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Whatisdifferencebetweeninstantiatinganobjectusingnewvs.without这可能是一个基本问题,并且可能已经被问过(例如,here);但我还是不明白。所以,让我问一下。考虑以下C++类:classObj{char*str;public:Obj(char*s){str=s;cout以下代码片段有什么区别:Objo1("Hi\n");和Obj*o2=newObj("Hi\n");为什么前者调用析构函数,而后者不调用(没有显式调用delete)?哪个更受欢迎?

c++ - 为什么我们需要 C++ 中的纯虚析构函数?

我了解虚拟析构函数的必要性。但是为什么我们需要一个纯虚拟析构函数呢?在其中一篇C++文章中,作者提到我们想要抽象类时使用纯虚析构函数。但我们可以通过将任何成员函数设为纯虚拟来使类抽象。所以我的问题是我们什么时候才能真正使析构函数成为纯虚函数?谁能给出一个很好的实时示例?当我们创建抽象类时,将析构函数也设为纯虚拟是一种好习惯吗?如果是……那为什么? 最佳答案 可能允许纯虚析构函数的真正原因是禁止它们意味着在语言中添加另一条规则,并且不需要这条规则,因为允许纯虚析构函数不会产生不良影响。不,普通的旧虚拟就足够了。如果您为其虚拟方法创建一

c++ - 为什么我们需要 C++ 中的纯虚析构函数?

我了解虚拟析构函数的必要性。但是为什么我们需要一个纯虚拟析构函数呢?在其中一篇C++文章中,作者提到我们想要抽象类时使用纯虚析构函数。但我们可以通过将任何成员函数设为纯虚拟来使类抽象。所以我的问题是我们什么时候才能真正使析构函数成为纯虚函数?谁能给出一个很好的实时示例?当我们创建抽象类时,将析构函数也设为纯虚拟是一种好习惯吗?如果是……那为什么? 最佳答案 可能允许纯虚析构函数的真正原因是禁止它们意味着在语言中添加另一条规则,并且不需要这条规则,因为允许纯虚析构函数不会产生不良影响。不,普通的旧虚拟就足够了。如果您为其虚拟方法创建一

c++ - C++中的纯虚析构函数

写错了吗:classA{public:virtual~A()=0;};对于抽象基类?至少在MSVC中编译...它会在运行时崩溃吗? 最佳答案 是的。你还需要实现析构函数:classA{public:virtual~A()=0;};inlineA::~A(){}应该够了。如果你从A派生出任何东西,然后尝试删除或销毁它,A的析构函数最终会被调用。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用purecall处理程序并崩溃。编辑:修正声明更符合,编译http://www.comeaucomputing.c

c++ - C++中的纯虚析构函数

写错了吗:classA{public:virtual~A()=0;};对于抽象基类?至少在MSVC中编译...它会在运行时崩溃吗? 最佳答案 是的。你还需要实现析构函数:classA{public:virtual~A()=0;};inlineA::~A(){}应该够了。如果你从A派生出任何东西,然后尝试删除或销毁它,A的析构函数最终会被调用。由于它是纯粹的并且没有实现,因此会出现未定义的行为。在一个流行的平台上,这将调用purecall处理程序并崩溃。编辑:修正声明更符合,编译http://www.comeaucomputing.c