我有一個包裝類爲int,名爲intWrapper
,並且將兩個數相加的函數addN
,定義如下:不同的行爲在Visual C++相比MingW平臺
intWrapper* addN(intWrapper *first, intWrapper *second)
{
intWrapper c;
c.setData(first->getData() + second->getData());
return &c;
}
然後,在主( )功能我這樣做:
intWrapper first(20), second(40);
intWrapper* t = addN(&first, &second);
cout << (*t).getData() << endl;
在開發 - C++(MINGW32)這個執行如預期,並打印出值60
,但在Visual C++我得到的值-858993460
。
但是,如果我使用new關鍵字在addN函數內創建一個新對象,則它在Visual C++中也會輸出60
。我很好奇爲什麼發生這種情況。有什麼想法嗎?
全部代碼是在這裏:
#include <iostream>
using namespace std;
template<typename T, T defaultValue>
class Wrapper
{
private: T n_;
public:
Wrapper(T n = defaultValue) : n_(n) {}
T getData()
{
return n_;
}
void setData(T n)
{
n_ = n;
}
};
typedef Wrapper<int, 47> intWrapper;
intWrapper* addN(intWrapper *first, intWrapper *second)
{
intWrapper c;
c.setData(first->getData() + second->getData());
return &c;
}
int main()
{
intWrapper p;
cout << p.getData() << endl;
intWrapper first(20), second(40);
intWrapper* t = addN(&first, &second);
cout << (*t).getData() << endl;
system("PAUSE");
return 1;
}
另請注意,VC++喜歡用0xbaadf00d,0xcccccccc,0xffffffff等值填充每一塊可能存在的「不良內存」。在你的情況下,你已經得到值0xFFFFFFFFCCCCCCCC,這看起來像程序吞嚥了一些嘔吐物。 – ActiveTrayPrntrTagDataStrDrvr 2012-03-08 09:59:02
你應該習慣於啓用高警告級別...... – PlasmaHH 2012-03-08 11:08:24