草庐IT

destructors

全部标签

c++ - "Expected constructor, destructor, or type conversion before ' < ' token"

我遇到语法/解析错误,但我似乎找不到它。DataReader.h:11:error:expectedconstructor,destructor,ortypeconversionbefore'这里是DataReader.h:#include#include#include#ifndefDATA_H#defineDATA_H#include"Data.h"#endifvectorDataReader();//Thisisline11,wheretheerroris..这是.cpp文件:#include"DataReader.h"usingnamespacestd;vectorDataRe

C++ 编译 "error: expected constructor, destructor, or type conversion before ' =' token "

位于同一文件“foo.h”中的非常简单的代码:classXface{public:uint32_tm_tick;Xface(uint32_ttk){m_tick=tk;}}std::mapm;Xface*tmp;tmp=newXface(100);**//Error**m[1]=tmp;**//Error**tmp=newXface(200);**//Error**m[2]=tmp;**//Error**错误是错误:在“=”标记之前需要构造函数、析构函数或类型转换对于每个任务。 最佳答案 C++不是脚本语言。您可以在可执行代码块的范

c++ - 多重继承中使用operator delete时谁来调用类的Destructor

这个问题听起来可能太傻了,但是,我在其他任何地方都找不到具体的答案。对后期绑定(bind)的工作原理和继承中使用的virtual关键字知之甚少。在代码示例中,在继承的情况下,指向在堆上创建的派生类对象的基类指针和删除运算符用于释放内存,派生类和基类的析构函数将被调用仅当基类析构函数被声明为虚函数时才按顺序排列。现在我的问题是:1)当base的析构函数不是virtual时,为什么只有在使用“delete”运算符的情况下才会出现不调用deriveddtor的问题,为什么在下面给出的情况下不会:deriveddrvd;base*bPtr;bPtr=&drvd;//DTORcalledinpr

c++ - 链接器错误 : wants C++ virtual base class destructor

我有一个链接错误,链接器提示说我的具体类的析构函数正在调用它的抽象父类(superclass)析构函数,而它的代码丢失了。这是在MacOSX上从XCode使用GCC4.2。我看到了g++undefinedreferencetotypeinfo但这并不完全相同。这是链接器错误消息:Undefinedsymbols:"ConnectionPool::~ConnectionPool()",referencedfrom:AlwaysConnectedConnectionZPool::~AlwaysConnectedConnectionZPool()inRKConnector.old:symbo

c++ - C++ 是否为纯虚拟类创建默认值 "Constructor/Destructor/Copy Constructor/Copy assignment operator"?

C++编译器是否为这个“类”生成默认函数,如Constructor/Destructor/Copy-Constructor...?classIMyInterface{virtualvoidMyInterfaceFunction()=0;}我的意思是不可能实例化这个“类”,所以我认为没有生成默认函数。否则,人们会说您必须使用虚拟析构函数。这意味着如果我不定义析构函数virtual它将默认创建,而不是virtual。此外,我想知道为纯虚拟接口(interface)定义虚拟析构函数是否合理,如上所示?(所以这里没有使用指针或数据,所以不需要破坏任何东西)谢谢。 最

c++ - "temporary of type ' A ' has protected destructor", 但它的类型是 B

在以下代码中,使用Clang8.0.0+和-std=c++17编译,使用B{}创建派生类实例会报错错误:'A'类型的临时对象具有protected析构函数。当临时文件的类型为B(因此应该有一个公共(public)析构函数)时,为什么A会出现在此消息中?https://godbolt.org/z/uOzwYaclassA{protected:A()=default;~A()=default;};classB:publicA{//canalsoomitthese3lineswiththesameresultpublic:B()=default;~B()=default;};voidfoo(

c++ - VS2015 更新 1 个错误,或错误的 C++ : Why can't a friend class access its friend's protected destructor?

以下似乎是ZeroCICE在其自动生成的代码中采用的一种模式,在我看来,这似乎是他们现在为其工具的许多版本制作单例(不确定为什么)的一种方式。各种编译器都没有问题,直到今天发现VisualStudio2015Update1(VS版本14.0.24720.00,VC++版本19.00.23506)报错。在Update1之前,VS2015也没有问题。我不确定它是带有Update1的VS2015C++编译器中的错误(回归?),还是其他编译器放任自流的错误(不符合标准)C++代码。这是代码模式的示例:classFoo{protected:virtual~Foo(){}friendclassFo

c++ - 有没有办法调用纯虚类的 "deleting destructor"?

我在UbuntuTrusty上使用C++11和g++4.8。考虑这个片段classParent{public:virtual~Parent()=default;virtualvoidf()=0;};classChild:publicParent{public:voidf(){}};使用调用{Childo;o.f();}{Parent*o=newChild;deleteo;}{Child*o=newChild;deleteo;}我使用gcov生成我的代码覆盖率报告。它报告从未调用带有符号_ZN6ParentD0Ev的析构函数,而_ZN6ParentD2Ev是。回答Dualemission

c++ - std::is_constructible on type with non-public destructor

std::is_constructible的预期结果是什么?在具有私有(private)或protected析构函数的类型上?例如,即使只有friend可以释放它,我仍然可以在堆上构造这样一个对象:#includeclassFoo{friendvoidfreeFoo(Foo*);public:Foo(){}private://Destructorisprivate!~Foo(){}};voidfreeFoo(Foo*f){deletef;//deletingafooisfineherebecauseoffriendship}intmain(){Foo*f=newFoo();//dele

c++ - 好坏 : Calling destructor in constructor

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。ImprovethisquestionBreak:我不认为这实际上是同一个问题,另一个问题是关于手动调用析构函数的一般问题。这是在类本身内部的创建过程中。仍然想知道执行此操作时会发生什么,如下面的问题所述。起初,我认为它很糟糕,真的很糟糕。只是分析构造函数的这段代码(见下文),由两个人编写,需要将其转换为Delphi对象Pascal。它的行为必须与C版本相同。我不喜欢这种风格,非常丑陋,但没关系。另一件事,在代码的两个阶段,它