gpt4 book ai didi

c++ - C++中的新对象

转载 作者:行者123 更新时间:2023-11-30 03:09:05 25 4
gpt4 key购买 nike

我是 C++ 编程的新手,如果你能帮助我,我会很高兴。我试着写这段代码:

bool RailwayLineList:: AddInTail(const RailwayLine& data)
{
//there is no linked list to add the element
if(this==NULL)
return false;
RailwayLineLink *newLink = new RailwayLineLink(data);
}

当我尝试调试它时,我看到复制构造函数已被调用并且数据已用一些垃圾进行了初始化(该类正在使用默认构造函数)。

为什么要调用复制构造函数?

最佳答案

复制构造函数是具有特定签名的构造函数。它采用单个参数,const 引用正在构造的相同类型。所以对于 class Foo,复制构造函数如下所示:

Foo::Foo(const Foo&)

还有 2 种其他类型的构造函数:default 和 convert。默认构造函数不带参数(或者可以像不带参数一样调用,例如,所有参数都有默认值):

Foo::Foo()

...convert 析构函数基本上是其他任何东西。例如:

Foo::Foo(const Bar&)

why is the copy constructor being called?

在您的例子中,您正在调用一个 RailwayLineLink 构造函数,但传递了一个对 RailwayLine 的 const 引用,因此您实际上调用的是一个转换构造函数,而不是一个复制构造函数。

转换构造函数被调用是因为你调用了它:

new RailwayLineLink(data);

这会构造一个新的 RailwayLineLink 对象,将 data 作为唯一的参数传递给构造函数。

如果你有一个空的转换构造函数,它看起来像这样:

RailwayLineLink::RailwayLineLink(const RailwayLine&)
{
}

...那么新拷贝的所有成员都将是默认构造的,并且可能包含垃圾。

通常当你实现一个复制构造函数时,你会想要做一些从原始到拷贝的成员复制,就像这样:

RailwayLineLink::RailwayLineLink(const RailwayLine& rhs)
: value_(rhs.value_)
{
}

关于c++ - C++中的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433657/

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