gpt4 book ai didi

c++ - vector.push_back(B) 和 vector.push_back(new A((*B))),为什么不一样呢?

转载 作者:太空宇宙 更新时间:2023-11-04 14:41:44 26 4
gpt4 key购买 nike

<分区>

我有这两个类:

class A
{
public:
A();
virtual ~A();

virtual void TellMyName();
};

class B : public A
{
private:
std::string szName;
public:
B();
~B();

void TellMyName();

void SetName(std::string val){ szName = val; }
};

这是我的代码:

void main()
{
std::vector<A*> List_A;

B* B_Instance = new B();
B_Instance->SetName("B");

List_A.push_back(B_Instance); // Way 1
List_A.push_back(new A((*B_Instance))); // Way 2

List_A[0]->TellMyName();
List_A[1]->TellMyName();
}

TellMyName() 只是要提示一个消息框。如果我使用“Way 1”没有问题,但是如果我使用“Way 2”它会提示没有文本的消息,这意味着 B 类的所有成员都是空的,就像他们从未被任何东西填充一样.我使用 std::shared_ptr 解决了这个问题,但是有没有其他方法可以不使用智能指针,因为我必须在一个大项目中实现这种方法,并且会有很多变化和失败。顺便问一下,“Way 2”的原因是什么?

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