c++ - 指针有拷贝构造函数吗?

标签 c++ pointers smart-pointers

我正在从 C 指针过渡到 C++ 指针,现在正在学习 auto_ptr。这是我试过的程序:

#include <iostream>
#include <memory>
#include "Car.h"
using namespace std;
typedef auto_ptr<Car> CarPtr;
int main() {
    CarPtr au_ptr1(new Car());
    CarPtr au_ptr2 = new Car();
    Car *norm_ptr1 = new Car();
    Car *norm_ptr2(new Car());
    int *i_ptr1=new int();
    int *i_ptr2(new int());
}

像下面这样的语句是什么意思?

int *i_ptr2(new int());
Car *norm_ptr2(new Car()); 

上面提到的语句编译成功。下面的语句抛出编译错误 - CarPtr au_ptr2 = new Car(); 这是为什么?

提前致谢

最佳答案

它确实有一个复制构造函数,但是转换构造函数是显式的,这就是导致错误的原因:

explicit auto_ptr (X* p=0) throw();

这意味着 Car*无法隐式转换为 auto_ptr<Car> , 这就是

CarPtr au_ptr2 = new Car();

尝试去做。这称为复制初始化,相对于:

CarPtr au_ptr1 (new Car());

这是值初始化。第一个版本将尝试创建一个临时的 CarPtr来自Car*并用它来初始化 au_ptr2 .第二种直接调用拷贝构造函数。

像这样的语句

int *i_ptr2(new int());

简单地用括号中的值对指针进行值初始化。

关于c++ - 指针有拷贝构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12723605/

相关文章:

c++ - 一个 MinGW,许多 GCC 版本 - 怎么做?

c++ - 保留超出范围的类的数据?

c++ - 关于 C++ 中的 const 指针的问题?

C 警告 : Function returns address of local variable

c++ - unique_ptr资源设置为nullptr后如何释放?

c++ - 无法将 int 分配给返回类的成员 int

c++ - 在 C++ 类中使用构造函数为 char 数组提供默认值

c++ - 以随机大小初始化 std::array

c++ - 我可以将什么用作 NULL 结构?

c++ - 通过复制到函数将指针传递给动态分配的数组会产生意外结果