我有一个类模型:
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;
}
似乎对 _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();
}
}
现在 - 当我打电话时:
{
TransferSingleCard(*_stack[DECK], _someotherplace, FACEDOWN);
std::cout << *_stack[DECK];
std::cout << *_deck;
}
我得到这个输出(其中 CardStack
上的 std::cout 将打印出该堆栈的大小):
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;
};
最佳答案
不清楚你在问什么 - 考虑这段代码:
#include <iostream>
#include "boost/shared_ptr.hpp"
using namespace std;
struct A {
virtual ~A() {
cout << "destroyed" << endl;
}
};
struct B : public A {
};
int main() {
boost::shared_ptr<B> b( new B );
boost::shared_ptr<A> a;
a = b;
}
只出现一条“destroy”信息,表示没有复制。
关于c++ - 为什么这些 shared_ptr 不指向同一个容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575095/