GNU GCC会跟踪以前使用箭头操作员对的对象



使用以下结构,

struct A
{
    A(int d1, int d2)
    {
        data1 = d1;
        data2 = d2;
    }
    int data1, data2;
};

函数下方的最后一行是否会再次删除指针,或者编译器知道使用先前的对象?

int main()
{
    A* a = new A(1, 2);
    //dereference a
    cout << a->data1 << endl;
    //dereference a again?
    cout << a->data2 << endl;
}

如果没有,是否有任何编译器可以这样做?

我知道我可以执行一个实验来测试我的问题,但是我不太了解汇编语言。

是的,在这样的情况下,生成的代码实际上不会执行另一个解雇。当编译器可以确定a不会在两个语句之间改变时,这将发生。

这是一个常见的优化类别,当人们违反严格的别名规则时,这是许多错误的原因(因为这可能会破坏编译器检测a没有改变的能力)。<<<<<<<<<<<</p>

相关内容

  • 没有找到相关文章

最新更新