相关疑难解决方法(0)

GNU GCC(g ++):为什么它会产生多个dtors?

开发环境:GNU GCC(g ++)4.1.2

虽然我正在尝试研究如何在单元测试中增加"代码覆盖率 - 特别是功能覆盖率",但我发现有些类dtor似乎是多次生成的.你们当中有些人知道为什么吗?

我通过使用以下代码尝试并观察了我上面提到的内容.

在"test.h"中

class BaseClass
{
public:
    ~BaseClass();
    void someMethod();
};

class DerivedClass : public BaseClass
{
public:
    virtual ~DerivedClass();
    virtual void someMethod();
};
Run Code Online (Sandbox Code Playgroud)

在"test.cpp"中

#include <iostream>
#include "test.h"

BaseClass::~BaseClass()
{
    std::cout << "BaseClass dtor invoked" << std::endl;
}

void BaseClass::someMethod()
{
    std::cout << "Base class method" << std::endl;
}

DerivedClass::~DerivedClass()
{
    std::cout << "DerivedClass dtor invoked" << std::endl;
}

void DerivedClass::someMethod()
{
    std::cout << "Derived class method" << std::endl;
}

int main()
{
    BaseClass* …
Run Code Online (Sandbox Code Playgroud)

c++ destructor g++

84
推荐指数
2
解决办法
6756
查看次数

ARM C++ ABI:构造函数/析构函数返回值

我一直在阅读Clang源代码,发现了一些关于ARM C++ ABI的有趣内容,我似乎无法理解其中的理由.从ARM ABI文档的在线版本:

这个ABI要求C1和C2构造函数返回(而不是void函数),这样C3构造函数可以尾调用C1构造函数,C1构造函数可以尾调用C2.

(对于非虚拟析构函数也是如此)

我不知道是什么C1,C2以及C3在这里引用.这一节,就是要的§3.1.5从通用(即安腾)ABI的修改,而这部分(至少在这个网上verison)简单地说:

构造函数返回void结果.

无论如何,我真的无法弄清楚这是什么目的:如何使构造函数返回允许尾部调用优化,以及在什么情况下?

到目前为止,我可以说,构造函数可以尾部调用另一个具有相同this返回值的唯一时间是具有单个基类的派生类,一个简单的构造函数体,没有具有非平凡构造函数的成员,并且没有虚拟表指针.实际上,使用void返回来优化尾部调用似乎实际上更容易,而不是更难,因为这样可以消除单个基类的限制(在多基类的情况下,this指针从最后调用的构造函数不会是this派生对象的指针).

我在这里错过了什么?ARM调用约定是否有this必要使返回成为必要?

c++ arm abi

15
推荐指数
1
解决办法
1448
查看次数

标签 统计

c++ ×2

abi ×1

arm ×1

destructor ×1

g++ ×1