我在空閒時間正在進行一個小型遊戲,並且在編碼時遇到了一個問題。這是某種指針錯誤?
我已經分離出的問題,並使其儘可能小的位置:
#include <iostream>
#include <memory>
#include <vector>
#include <Windows.h>
class Base
{
public:
std::string p;
virtual ~Base()
{
}
virtual std::vector<std::shared_ptr<std::string>> getText() = 0;
};
class Derived1 : public Base
{
public:
Derived1()
{
p = "from1";
}
std::vector<std::shared_ptr<std::string>> getText()
{
return std::vector<std::shared_ptr<std::string>>{std::shared_ptr<std::string>(&p)};
}
};
class Derived2 : public Base
{
public:
Derived2()
{
p = "from2";
}
std::vector<std::shared_ptr<std::string>> getText()
{
return std::vector<std::shared_ptr<std::string>>{std::shared_ptr<std::string>(&p)};
}
};
int main()
{
std::unique_ptr<Base> state;
std::vector<std::shared_ptr<std::string>> displayText;
state.reset(new Derived1());
displayText = state->getText();
while(1)
{
for(auto i = displayText.begin(); i != displayText.end(); ++i)
std::cout << **i;
if (GetKeyState('2') < 0)
{
state.reset(new Derived2());
displayText.clear();
displayText = state->getText();
}
else if (GetKeyState('1') < 0)
{
state.reset(new Derived1());
displayText.clear();
displayText = state->getText();
}
}
return 0;
}
當按下「1」和「2」來回,似乎有時工作,當我離開了我得到類似-1073741510或類似的返回值。在我的遊戲代碼中,它也似乎崩潰了很多。
(通過口出我的意思是使用命令窗口上的X按鈕,抱歉沒有澄清)
多態類一起做上一般的unique_ptr一些研究和三分球后,我仍然無法理解爲什麼按照它的方式行事。
那麼,這是怎麼回事?
定義「退出」。所示的代碼沒有提供乾淨地終止程序的方法。它運行在一個無限循環中。 –
@SamVarshavchik修好了,對不起,沒有澄清 –