草庐IT

call_me_virtual

全部标签

c++ - 为什么 virtual 关键字会增加派生类的大小?

我有两个类-一个基类和一个派生类:classbase{inti;public:virtual~base(){}};classderived:virtualpublicbase{intj;};main(){cout这里的答案是16。但是如果我改为非虚拟公共(public)继承或使基类成为非多态的,那么我得到的答案是12,即如果我这样做:classbase{inti;public:virtual~base(){}};classderived:publicbase{intj;};main(){cout或classbase{inti;public:~base(){}};classderived

c++ - 这是正确的 : virtual method of Derived called before constructing Base object?

我知道在Base类的构造函数中-当调用虚拟方法时-调用Base方法,而不是派生-参见Callingvirtualfunctionsinsideconstructors.我的问题与这个主题有关。我只是想知道如果我在Derived类构造函数中调用虚拟方法会发生什么-但在构造Base部分之前。我的意思是调用虚方法来评估基类构造函数参数,请参见代码:classBase{public:Base(constchar*name):name(name){cout编译器g++(4.3.x-4.5x版本)输出为:Derived::getName()Base():DerivedDerived():Deriv

c++ - 无趣的模拟函数调用 bla() && 预期 : to be called at least once bla()?

我用模拟类编写了一个小测试。当我运行它时,首先我得到一个警告,说调用了一个无趣的模拟函数,然后测试失败,因为没有满足预期,即至少调用了一次模拟函数。有趣的是,当我看到上面的警告消息时,该函数被调用了。你对这件事有什么想法吗?谢谢!编辑:这是我的代码结构:classBla{public:Bla();virtual~Bla();virtualfloatmyFunction();}classMockBla:publicBla{MockBla();~MockBla();MOCKMETHOD0(myFunction,float());}classCallerClass{public:Caller

c++ - 与 move 构造函数混淆 : unable to call move constructor

我一直难以理解C++中的move构造函数。我用默认构造函数、复制构造函数、move构造函数和析构函数制作了一个简单的类。此外,我定义了一个具有两个重载的函数,一个接受对该类的引用,一个接受对该类的右值引用。我的测试代码如下。#includeclassc{public:c(){std::cout我得到的输出不是我所期望的。以下是我从此代码获得的输出。defaultconstructorcopyconstructorpassedbyreferencedefaultconstructorpassedbyrvaluereferencedestructor除了第3行,我能理解所有行的输出。在第3

c++ - "error: no matching function for call to"

我当时在键盘上,我正在尝试使用C++来提高我的技能。我以前从未使用过模板,所以我尝试研究如何使用它们。下面的代码是结果,不幸的是,它不起作用。我确实尝试寻找问题的解决方案,但由于我没有太多使用模板的经验,所以我无法在我的问题和其他问题之间建立任何联系。所以,我决定寻求帮助。templateclassVector2{public:Ax,y;Vector2(Axp,Ayp){this->x=xp;this->y=yp;}};templateclassrayToCast{public:rayToCast(Bangle,Vector2origin,Vector2point1,Vector2po

c++ - 错误 C1090 : PDB API call failed, 错误代码 '0':'

我正在尝试在VisualStudio2013中编译一个C++项目,但出现以下错误errorC1090:PDBAPIcallfailed,errorcode'0':'我需要帮助! 最佳答案 我在MSVC2017中看到了这个错误。我在一个文件中遇到了编译错误(缺少右括号)。此错误发生在以下所有文件上。修复第一个编译错误使它们消失。 关于c++-错误C1090:PDBAPIcallfailed,错误代码'0':',我们在StackOverflow上找到一个类似的问题:

C#/命令行界面 : Destructor not called if Dispose() used in it

我有一个名为“CTransferManaged”的C++/CLI类,其中实现了终结器和析构函数:CTransferManaged::~CTransferManaged(){this->!CTransferManaged();}CTransferManaged::!CTransferManaged(){//Cleanupresources...}此类由名为“CTransfer”的C#类包装,其中包含类型为CTransferManaged的​​对象m_transfer。如果此类的析构函数仅清除对对象m_transfer的引用,我可以看到调用了析构函数(命中断点):~CTransfer(){

c++ - 编译时分派(dispatch) : conditional on valid call

给定以下代码:templateclassJoinedObjectGroup:public_ObjectSpaceHolder,public_ObjectSpaceHolder{public:JoinedObjectGroup(GroupA&groupA,GroupB&groupB):_ObjectSpaceHolder(groupA),_ObjectSpaceHolder(groupB){}templateObjectTypeget(){//Dispatchtoappropriatehandler:onlyoneofthefollowingactuallycompilesas//eit

C++ "virtual"关键字放置

当我今天在VisualStudio2015中编写界面时,我注意到一些奇怪的行为。在函数标识符之前放置“virtual”关键字通常无关紧要,但如果它放置在指针或引用之后,它就会报错。请参阅以下内容:classB{};classA{virtualBfun1a();//OKBvirtualfun1b();//OKvirtualB&fun2a();//OKB&virtualfun2b();//ERROR,"expectedanidentifier"virtualB*fun3a();//OKB*virtualfun3b();//ERROR,"expectedanidentifier"virtua

c++ - C3859 : Virtual memory range for PCH exceeded

我在编译(编辑:抱歉,我在这里没有说清楚:我实际上是指“重建”)我的混合模式项目时不时(不是每次)收到此错误消息。VisualStudio告诉我“使用‘-Zm114’或更高的命令行选项重新编译”。原则上没问题,我照VS说的做。但是目前,这有两个问题:为什么它不会在我进行重建时每次发生?如果我理解正确,编译器在编译我的项目时内存不足。因此,如果我进行重建,清除所有以前的工作,如果我不做任何更改,下次它不应该也用完内存吗?为了安全起见,我已经在这个项目的所有配置中为Zm(即Zm120)指定了120的值。为什么我会收到带有此较低值的错误消息?还是建议值114只是VS的胡乱猜测?