当我在外部C中创建对象时调用C++类析构函数

当我在外部C中创建对象时调用C++类析构函数,c++,c,C++,C,当一个函数被销毁时,在这样的代码段中是否调用了析构函数 extern "C" { int func() { A a(); // a is object of class A } } 函数名的语言链接对函数的语义没有影响。它只影响名称在程序中的显示方式 您的函数按预期运行。尽管从您编写的内容来看。函数名的语言链接对函数的语义没有影响。它只影响名称在程序中的显示方式 您的函数按预期运行。尽管是从您所写的内容来看。extern C是一个链接时间指令。它不会改变

当一个函数被销毁时,在这样的代码段中是否调用了析构函数

extern "C" {
    int func()
    {
        A a(); // a is object of class A
    }
}

函数名的语言链接对函数的语义没有影响。它只影响名称在程序中的显示方式


您的函数按预期运行。尽管从您编写的内容来看。

函数名的语言链接对函数的语义没有影响。它只影响名称在程序中的显示方式

您的函数按预期运行。尽管是从您所写的内容来看。

extern C是一个链接时间指令。它不会改变语言本身的工作方式

在您的案例中没有调用析构函数,因为A;为不带参数且返回a的函数声明函数原型。它不会创建a的实例。请参阅最令人烦恼的解析

如果你写了一个A;相反,如果a超出范围,则会调用默认构造函数和析构函数。

extern C是一个链接时间指令。它不会改变语言本身的工作方式

在您的案例中没有调用析构函数,因为A;为不带参数且返回a的函数声明函数原型。它不会创建a的实例。请参阅最令人烦恼的解析

如果你写了一个A;相反,如果a超出范围,则会调用默认构造函数和析构函数。

外部C限定只会影响函数的调用方式,并对函数签名施加一些约束。它不会影响它的实现。也就是说,如果函数中有一个对象,它将被构造和销毁

当然,在问题中的代码中,实际上没有对象被创建为A;是一个函数声明。如果您想实际创建一个对象并调用其默认构造函数,您可以使用以下定义之一:

A a1 = A();
A a2{};
extern C限定只会影响函数的调用方式,并对函数签名施加一些约束。它不会影响它的实现。也就是说,如果函数中有一个对象,它将被构造和销毁

当然,在问题中的代码中,实际上没有对象被创建为A;是一个函数声明。如果您想实际创建一个对象并调用其默认构造函数,您可以使用以下定义之一:

A a1 = A();
A a2{};

这些问题可以在家里通过构建一个小型测试程序来回答:

#include <iostream>

struct A
{
    ~A() { std::cout << __func__ << std::endl; }
};

extern "C" {
    int func()
    {
        A a; // a is object of class A
        return 0;
    }
}

int main()
{
    func();
    return 0;
}

回答:是的

这些问题可以在家里通过构建一个小型测试程序来回答:

#include <iostream>

struct A
{
    ~A() { std::cout << __func__ << std::endl; }
};

extern "C" {
    int func()
    {
        A a; // a is object of class A
        return 0;
    }
}

int main()
{
    func();
    return 0;
}

<>回答:是的< /P>你的注释是不正确的。这是C++代码,不是C代码。请删除“C”标记,你的注释是不正确的。这是C++代码,不是C代码。请删除“c”标签