当我在外部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”标签