gpt4 book ai didi

c++ - 为什么这些 shared_ptr 不指向同一个容器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:14 26 4
gpt4 key购买 nike

我有一个类模型:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com