草庐IT

virtual-destructor

全部标签

c++ - std::allocator 中 "destroy" "destructor" "deallocate"之间的区别?

在C++std::allocator中,有三个方法与一个共同的概念相关:解除分配销毁析构函数我想知道:从内存管理的角度来看,它们之间有何不同?我什么时候应该使用这个而不是那个?谢谢!编辑:更具体的疑问:一开始不好意思笼统地说,这里有一些我不明白的地方。析构函数是做什么的?文档没有说到析构函数调用时内存是否会自动释放destroy用于调用对象的析构函数,这里的“对象”是什么意思?再次感谢! 最佳答案 只是来自cppreference.comdocumentation的简短描述为我非常清楚地解释差异"1.Whatdoesdestruct

c# - "C# base class virtual function"- "override in Managed C++ ref class"

我有一个.NET_4ManagedC++ref类,它派生自用C#编写的.NET_4基类。C#基类:namespaceCore{publicclassResourceManager{publicclass_Resource{publicvirtualvoidDelete(){}}}}托管C++类:namespaceInput.DI{publicrefclassMouse:ResourceManager::_Resource{public:virtualvoidDelete(){}};}这是我遇到的错误:'Input::DI::Mouse::Delete':matchesbaserefcl

c++ - 多重继承 : size of class for virtual pointers?

给定代码:classA{};classB:publicvirtualA{};classC:publicvirtualA{};classD:publicB,publicC{};intmain(){cout输出:sizeof(D)8每个类都包含自己的虚指针,但不包含其任何基类的虚指针,那么,为什么class(D)的Size是8? 最佳答案 这取决于编译器的实现。我的编译器是VisualStdioC++2005。代码如下:intmain(){cout会输出sizeof(B):4sizeof(C):4sizeof(D):8B类只有一个虚指针

c++ - "pure virtual method called"实现 boost::thread 包装器接口(interface)时

我有一个小包装器,它集中了与线程相关的内容:classThread{protected:boost::thread*m_thread;virtualvoidwork()=0;voiddo_work(){work();}public:Thread():m_thread(NULL){}virtual~Thread(){catch_up();deletem_thread;}inlinevoidcatch_up(){if(m_thread!=NULL){m_thread->join();}}voidrun(){m_thread=newboost::thread(boost::bind(&Thr

c++ - 如何在 Xcode 中追踪 "libc++abi.dylib: Pure virtual function called!"

我有一个混合使用C++、Objective-C和Swift的多线程OSX应用程序。当我的应用程序关闭时,我在Xcode调试器窗口中看到:libc++abi.dylib:Purevirtualfunctioncalled!我知道这个错误通常是由在C++类构造函数或析构函数中调用虚函数引起的。有没有简单的方法可以找到它的位置?我所说的“简单”是指“不分析每个具有虚函数的类的每个构造函数和析构函数的每一行的调用树”。我没有看到堆栈跟踪。打印此消息时,调试器不会停止程序。从我的应用委托(delegate)的applicationDidTerminate方法记录的消息在此消息之前。我尝试在“所有

c++ - 基础和派生虚拟析构函数的影响

我对多个虚拟析构函数有了一些重新考虑,尤其是。读后阅读http://blogs.msdn.com/b/oldnewthing/archive/2004/05/07/127826.aspx.假设我有classBase{public:Base();virtual~Base();private:Logger*_logger;};//andclassDerived:publicBase{public:Derived();virtual~Derived();private:Logger*_logger;};在cpp文件中,在每个析构函数中我删除了相应的_logger指针Base::~Base()

c++ - 默认创建类 `final`还是给它们一个虚拟的析构函数?

如果将非虚拟析构函数的类用作基类(如果将指针或对基类的引用用于引用子类的实例),则它们是错误的来源。在C++11中添加了final类之后,我想知道设置以下规则是否有意义:每个类都必须满足以下两个属性之一:被标记为final(如果尚未(还)要从中继承)有一个虚拟析构函数(如果它是(或打算)继承)可能在某些情况下,这两个选项都不有意义,但我想可以将它们视为应仔细记录的异常。 最佳答案 可能由于缺少虚拟析构函数而引起的最常见的实际问题是通过指向基类的指针删除了一个对象:structBase{~Base();};structDerived:

c++ - 当派生类的析构函数是虚拟的而基类的 dtor 不是时代码崩溃

我在gcc4.4.5上尝试了以下代码。如果成员“data”不存在,代码执行正常,但在它存在的情况下,它会崩溃。当派生类的dtor不是虚拟时,它也不会崩溃。我知道在这两种情况下行为都是未定义的,如C++03(5.3.5/3)中所列,但仍然有人可以向我提供一些解释,为什么它在后一种情况下崩溃了?是的,我知道UB意味着任何事情都可能发生,但仍然我想知道特定于实现的细节。#includeusingstd::cout;structbase{intdata;base(){cout 最佳答案 假设在我的系统(gcc4.6.0,linuxx86_6

FPGA设计时序约束十六、虚拟时钟Virtual Clock

目录一、序言二、VirtualClock2.1 设置界面三、工程示例3.1工程设计3.2工程代码3.3 时序报告3.4 答疑四、参考资料一、序言  在时序约束中,存在一个特殊的时序约束,虚拟时钟VirtualClock约束,根据名称可看出时钟不是实际存在的,主要是在STA分析时序时提供一个参考。二、VirtualClock    相较于create_clock创建主时钟约束到实际的物理位置,虚拟时钟约束时不需要指定约束对象,主要用于辅助内部设计与外部设计进行时序分析。    常用场景如下:a)外部单元的I/O参考时钟不在设计内部的时钟中b)FPGA的I/O路径中关联的内部生成时钟和器件内部的源

c++ - 错误 : pure virtual method called - terminate called without an active exception - Aborted

在我的A.h文件中:classA{private:unsignedshortPC;public:A():PC(0){}virtual~A(){}virtualvoidexecute(unsignedshortPC)=0;};在我的B.h文件中:classB:publicA{private:intstatus;boolexe;public:B:status(0),exe(false){}virtualB(){}voidexecute(unsignedshortPC);};在我的B.cpp文件中:#include#include"B.h"voidB::execute(unsignedsho