我有一个班级模型:
class Model
{
...
boost::shared_ptr<Deck> _deck;
boost::shared_ptr<CardStack> _stack[22];
};
Deck
继承自CardStack
。
我试图通过以下方式_stack[0]
指出同一件事_deck
:
{
_deck = boost::shared_ptr<Deck>(new Deck());
_stack[0] = _deck;
}
似乎分配 to_deck
会_stack[0]
导致_deck
制作副本。(我知道这一点是因为修改_stack[0]
不会导致对 . 的修改_deck
。)我怎样才能让它们指向同一个东西?
好的 - 没有调用复制构造函数。我已经通过实现它并查看它是否被调用来验证这一点 - 它没有。
CardStack
但是 - 我有一个对对象进行操作的函数:
void TransferSingleCard(CardStack & src, CardStack & dst, Face f)
{
if( !src._cards.empty() )
{
src._cards.back().SetFace(f);
dst.PushCard(src._cards.back());
src._cards.pop_back();
}
}
现在 - 当我打电话时:
{
TransferSingleCard(*_stack[DECK], _someotherplace, FACEDOWN);
std::cout << *_stack[DECK];
std::cout << *_deck;
}
我得到这个输出(其中 a 上的 std::coutCardStack
将打印出该堆栈的大小):
Num(103) TOP
Num(104) TOP
...所以我得出的结论(错误地?)_stack[DECK]
指向不同的东西。
甲板
class Deck : public CardStack
{
public:
Deck(int numsuits=2, StackIndex index = NO_SUCH_STACK );
Deck::Deck( const Deck & d);
int DealsLeft() const;
void RecalcDealsLeft();
private:
int _dealsleft;
};