我寫一個編譯器,並使用雙端隊列來存儲一個類的方法,標籤和這裏的示例代碼:雙端隊列推回錯誤
#include <deque>
#include <iostream>
#include <string>
using std::cout;
using std::deque;
using std::endl;
using std::string;
int main()
{
deque<const char *> names;
string prefix = "___";
const char *classname = "Point";
const char *methodname[] = {"Init", "PrintBoth", "PrintSelf", "equals"};
for (int i = 0; i < 4; i++)
{
string label = prefix + classname + "." + methodname[i];
names.push_back(label.c_str());
}
for (int i = 0; i < 4; i++)
cout << names[i] << endl;
return 0;
}
但是,結果不是我所期待的:
___Point
___Point.PrintSelf
___Point.PrintSelf
___Point.equals
而且,我發現,如果我只逼退方法名
names.push_back(methodname[i])
我得到的所有的方法名秩序。
我在這裏做了什麼錯?
quick typer !!!! –
因此label.c_str()返回的指針指向標籤存儲空間內的某個位置? – manuzhang
@manuzhang:是的。 'label.c_str()'返回的是一個由'label'管理的指針。所以當'label'被銷燬時,它管理的內存就被釋放了。 – Nawaz