我有一个类模型:从CardStack
为什么这些shared_ptrs不指向同一个容器?
class Model
{
...
boost::shared_ptr<Deck> _deck;
boost::shared_ptr<CardStack> _stack[22];
};
Deck
继承。
我试图去让_stack[0]
指向同一件事,_deck
点:
{
_deck = boost::shared_ptr<Deck>(new Deck());
_stack[0] = _deck;
}
似乎正在取得分配给_stack[0]
的_deck
导致的_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();
}
}
现在 - 当我打电话:我得到这个输出(在那里的std ::在CardStack
COUT将
{
TransferSingleCard(*_stack[DECK], _someotherplace, FACEDOWN);
std::cout << *_stack[DECK];
std::cout << *_deck;
}
打印出该堆栈的大小):
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;
};
这应该工作。你得到了什么错误,或者你如何知道正在制作副本。 – 2010-04-04 16:52:25
@ Space_C0wb0y - 我知道这是一个副本,因为我通过将'Card'对象拉出来修改'_stack [0]'(它基本上是'Card'对象的容器)。然后我查询它们 - '_stack [0]'的大小已经缩小了,但'_deck'的大小仍然和pull之前一样。 – BeeBand 2010-04-04 16:55:08
你有没有尝试使两个'shared_ptr'属于同一类型?你能说明你做了什么修改吗?另外,尝试实现一个复制构造函数,看看它是否被调用(它不应该)。你可以显示'Deck'和'CardStack'类吗? – 2010-04-04 16:57:37