私はクラスモデルを持っています:
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;
}
の割り当て_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;
};