gpt4 book ai didi

c++ - 构造函数c++中指向不同类的指针初始化

转载 作者:太空宇宙 更新时间:2023-11-04 15:16:29 25 4
gpt4 key购买 nike

我在 BirdHouse 的构造函数初始化列表中初始化指向 Bird 的指针时遇到问题。好像没有指向我要指向的对象。

这是 Bird 类:

class Bird
{
std::string name;
static int objectCount;
public:
Bird () : name("Bird #" + std::to_string(objectCount))
{
++objectCount;
}

Bird (const Bird& bb) : name(bb.name + " copy")
{
}

friend class BirdHouse;
};

这是 BirdHouse 类:

class BirdHouse
{
Bird b;
Bird * bp;
Bird & br;
public:
BirdHouse(Bird aa, Bird bb, Bird cc) : b(aa), bp(&bb), br(cc) {}

void print() const
{
std::cout << "Bird b = " << b.name << std::endl;
std::cout << "Bird * bp = " << bp->name << std::endl;
std::cout << "Bird & br = " << br.name << std::endl;
}
};

当我想在 main() 中调用 BirdHouse::print() 时,程序崩溃了:

int main()
{
Bird b1;
Bird b2;
Bird b3 = b2;

BirdHouse bh1(b1,b2,b3);
// bh1.print(); // I can't call it because b2 points to weird stuff

return 0;
}

我应该如何初始化 BirdHouse 对象以使其指向适当的 Bird 对象?

最佳答案

崩溃是因为未定义的行为,因为您保存了一个指向按值传递的参数的指针,一旦函数返回,该对象就会被破坏。

据我所知,有两种可能的解决方案:要么将变量作为指针传递,要么通过引用传递。但是,请注意,如果 BirdHouse 对象的生命周期长于您传入的对象(作为指针或引用)的生命周期,您将再次出现未定义的行为。

关于c++ - 构造函数c++中指向不同类的指针初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31988849/

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