创建指针时没有调用构造函数吗?
Is there no constructor call when pointer is created?
当我 运行 这个程序 class A 的析构函数被调用两次但构造函数被调用一次。
#include<iostream>
using namespace std;
class A{
public:
A(){cout<<"constructor\n";}
~A(){cout<<"destructor\n";}
};
int main()
{
A a1;
A *ap=&a1;
delete ap;
return 0;
}
输出:
constructor
destructor
destructor
a1
是一个普通的旧变量,所以当你声明它时,构造函数被调用。 ap
是一个指针变量,因此声明它或分配给它不会调用任何构造函数。 ap
只是指向 a1
.
的指针
当您显式删除 ap
时调用析构函数,当 a1
超出范围时再次调用析构函数。如评论中所述,在未使用 new
初始化的指针上调用 delete
是错误的,并且会导致未定义的行为。
当我 运行 这个程序 class A 的析构函数被调用两次但构造函数被调用一次。
#include<iostream>
using namespace std;
class A{
public:
A(){cout<<"constructor\n";}
~A(){cout<<"destructor\n";}
};
int main()
{
A a1;
A *ap=&a1;
delete ap;
return 0;
}
输出:
constructor
destructor
destructor
a1
是一个普通的旧变量,所以当你声明它时,构造函数被调用。 ap
是一个指针变量,因此声明它或分配给它不会调用任何构造函数。 ap
只是指向 a1
.
当您显式删除 ap
时调用析构函数,当 a1
超出范围时再次调用析构函数。如评论中所述,在未使用 new
初始化的指针上调用 delete
是错误的,并且会导致未定义的行为。