1、为什么 CB 类可以使用 CB b1 = new CB();的方式,CA 和 CC 提示类型不符,这个从 new 的返回类型是 void*可以知道原因; CB 可以这么写仅仅因为构造函数传递的是 void* ??就可以从 CB*转换为 CB 类型么?
2、为什么 b1 会调用两次 CB 的构造函数??从生成的汇编代码上确实看到,调用了两次构造;但是在 Test 函数结束后,只是少调用了一次 CB 析构函数,前边一共有 4 次 CB 的构造函数,在 Test 函数结束后,只看到了 3 次 CB 的析构函数这是为什么?使用 delete b1 是语法错误,因为 b1 不是指针类型。
环境
VS2017 + C++14 语言的设置
class CA
{
public:
CA() { std::cout << "Class A" << std::endl; }; //无参构造函数
~CA() { std::cout << "Class A die..." << std::endl; };
};
class CB
{
public:
CB(void* pVOID = NULL) { std::cout << "Class B" << std::endl; }; //构造需要传递指向 void 类型的指针,默认为 NULL
~CB() { std::cout << "Class B die..." << std::endl; };
};
class CC
{
public:
CC(int* pLength = NULL) { std::cout << "Class C" << std::endl; } //构造需要传递指向 int 类型的指针,默认为 NULL
~CC() { std::cout << "Class C die..." << std::endl; };
};
void Test(void)
{
CA a0;
//CA a1 = new CA(); //缺少合适构造函数,使 CA* 转换为 CA
CA* a2 = new CA();
CB b0;
CB b1 = new CB(); //为什么这里就可以这么使用呢?并且从运行结果上看执行了两次 CB 的构造函数?
CB* b2 = new CB();
CC c0;
//CC c1 = new CC(); //缺少合适构造函数,使 CC*转换为 CC
CC* c2 = new CC();
delete a2;
//delete b1; //不是 CB*类型
delete b2;
delete c2;
}