我在BirdHouse的構造函數初始化列表中初始化指向Bird的指針時遇到問題。它似乎並不指向我想指向的對象。指針初始化到構造函數C++中的不同類
這裏是鳥類:
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;
};
這裏是禽舍類:
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()程序崩潰:
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對象?
請注意,我們不知道是否存在所有權轉讓 - 可能不是,在鳥屋的情況下;) – Quentin
@Quentin是的,我同意所有權在這種情況下沒有意義,但我認爲這是一般有用的信息,但也許它只是混淆了答案。 –