類返回後:爲const char *有垃圾字符(縣),它是從功能
class myclass {
public:
myclass(void);
const char* server;
private:
char pidchar[6];
int pidnum;
};
功能
myclass parseINI(const char* file)
{
myclass iniOptions;
CSimpleIniA ini;
ini.SetUnicode();
ini.LoadFile(file);
const char* server = ini.GetValue("", "server", "");
iniOptions.server = server;
std::cout << server << "\n"; // Prints the correct value here
fflush(stdout);
return iniOptions;
}
從main函數調用它
int _tmain(int argc, TCHAR* argv[])
{
myclass options;
options = parseINI("myapp.ini");
std::cout << options.server << "\n"; // It prints junk here
return 0;
}
我做錯了什麼?
親愛的上帝,請不要忘記嘗試刪除解構者,但是。 – Squirrelsama 2010-12-02 19:44:01
由於RVO,這應該沒有關係。問題是通過`ini`使用其他堆棧分配的內存。 http://stackoverflow.com/questions/1394229/understanding-return-value-optimization-and-returning-temporaries-c – 2010-12-02 19:44:20
即使沒有RVO,這也不會導致問題(除非類有一個錯誤的拷貝構造函數,這是這次不是這種情況)。在這裏沒有理由不按值返回類對象。 – aschepler 2010-12-02 19:49:47