class A
{
public:
A();//code for constructor
~A();//code for destructor
}
int main(){
{
A a= new A();
delete a;
}
以下代码在哪里抛出错误..是一个隐式调用的A(),就像构造函数一样,或者在主函数中删除对象“a”。提前谢谢。
答案 0 :(得分:4)
假设您的代码更正为以下内容:
class A
{
public:
A();//code for constructor
~A();//code for destructor
};
int main()
{
A *a= new A();
delete a;
}
在删除之前通过delete调用析构函数释放对象占用的内存。
如果你的代码放在堆栈上,如下所示:
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循环,或者即使你只是在一个代码块周围放置大括号。
答案 1 :(得分:1)
当声明构造函数和析构函数时,您也必须定义它们。否则编译器会出现一些错误。你刚刚宣布......
示例:
class test { public: test() {} //declared and defined ~test() {} //declared and defined }
答案 2 :(得分:1)
此代码中有3个错误:
;
new
分配内存时,都应将其分配给指针答案 3 :(得分:0)
我同意@cppcode并会写同样的内容。
但我会添加一行
A a= new A();
应该是
A *a= new A;
或者不要声明构造函数/析构函数。 C ++会为你做这件事!
答案 4 :(得分:0)
new运算符返回一个指向你写入前面new运算符的类型的指针,因此你必须将它放在一个指针中,它的类型必须等于对象类型,或者至少指针类型必须是对象类型的基础。 当你使用delete运算符时,主对象调用的析构函数。
请原谅我的英语不好。