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