0
我正在使用VS2012。
我将代码从原始指针移植到unique_ptr并面临问题。
在这里,我试图模拟场景:具有虚拟和非虚拟功能的unique_ptr :: get()函数
class xyz{
public:
virtual int getm();
int get();
static std::unique_ptr<xyz> returnbase();
};
class abc:public xyz
{
public:
int getm() {return 0;}
};
std::unique_ptr<xyz> xyz::returnbase()
{
std::unique_ptr<xyz> u_Swift(nullptr);
u_Swift = std::unique_ptr<xyz>(dynamic_cast<xyz*>(new abc()));
return u_Swift;
}
int _tmain(int argc, _TCHAR* argv[])
{
xyz* x1 = xyz::returnbase().get();
x1->get();
x1->getm();
return 0;
}
我得到一个崩溃“访问冲突”而调用虚函数。
我很惊讶,为什么这是崩溃的虚拟功能?
通过观察我可以看到分配后虚拟指针已损坏。但为什么这是腐败的,我很好奇。
格式化你的代码。 –
为什么你写这样一个非常冗长的代码?例如'returnbase()'应该由一个语句组成:'return std :: unique_ptr(dynamic_cast (new xyz()));' –
将'new xyz()'铸造成'xyz *'?它已经是'xyz *'了。 – Wintermute