创建指针时没有调用构造函数吗?

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 是错误的,并且会导致未定义的行为。