我有一個類模型:從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