我有一个 int 的包装类,命名为intWrapper
,以及一个addN
添加两个数字的函数,定义如下:
intWrapper* addN(intWrapper *first, intWrapper *second)
{
intWrapper c;
c.setData(first->getData() + second->getData());
return &c;
}
然后,在main()函数中,我这样做:
intWrapper first(20), second(40);
intWrapper* t = addN(&first, &second);
cout << (*t).getData() << endl;
在 Dev-c++(MingW32) 中,它按预期执行,并将打印 value 60
,但在 Visual C++ 中我得到 value -858993460
。
但是,如果我使用 new 关键字在 addN 函数中创建一个新对象,它60
也会在 Visual C++ 中输出。我很好奇为什么会发生这种情况。有什么想法吗?
完整代码在这里:
#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;
}