class A
{
public:
A();//code for constructor
~A();//code for destructor
}
int main(){
{
A a= new A();
delete a;
}
以下代码在哪里引发错误.. 是像构造函数一样隐式调用 ~A() 还是在主函数中删除了对象“a”。提前致谢。
class A
{
public:
A();//code for constructor
~A();//code for destructor
}
int main(){
{
A a= new A();
delete a;
}
以下代码在哪里引发错误.. 是像构造函数一样隐式调用 ~A() 还是在主函数中删除了对象“a”。提前致谢。
假设您的代码已更正为以下内容:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
A *a= new A();
delete a;
}
在 delete 释放对象占用的内存之前,delete 会调用析构函数。
如果您的代码将 a 放入堆栈,如下所示:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
A a;
} // <---- Here
析构函数将在封闭范围的右大括号之前调用。在这种情况下,封闭范围是函数 main。
但是如果 a 是在另一个块中创建的,如下所示:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
if( 1 == 1 )
{
A a;
// Do something with a
} // <---- Here
}
析构函数将在 if 块的关闭块之前调用。这同样适用于您创建块的任何地方。在 for 循环、while 循环中,或者即使您只是在代码块周围加上大括号。
这段代码有3个错误:
;
new
时,都应将其分配给指针当你声明构造函数和析构函数时,你也必须定义它们。否则编译器会出现一些错误。你的刚刚被宣布...
例子:
班级考试 { 上市: test() {} //声明和定义 ~test() {} //声明和定义 }
我同意@cppcode 并且会写同样的。
但我会添加这一行
A a= new A();
应该
A *a= new A;
或者不要声明构造函数/析构函数。C++ 将为您完成这项工作!
new 运算符返回一个指向您写入前面 new 运算符的类型的指针,因此您必须将它放在一个指针中,它的类型必须等于对象类型,或者至少指针类型必须是对象类型的基础。当您使用删除运算符时,主对象调用的析构函数。
请原谅我的英语不好。