gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:55:59 25 4
gpt4 key购买 nike

我正在从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com