AIX & C++高手近来求解释!!!

jackzhhuang 2011-08-26 05:59:50

class CTest
{
public:
CTest()
{
std::cout << "&&&&&&&&&&&&&&init!!!!!!\n";
}

static CTest* Get()
{
static CTest t;
return &t;
}
};

int main()
{
CTest* p1 = CTest::Get();
printf("p1 = %p\n", p1);

while(1)
{
CTest* p2 = CTest::Get();
printf("p2 = %p\n", p2);
break;
}
}

windows 下输出为:
&&&&&&&&&&&&&&init!!!!!!
p1 = 00419138
p2 = 00419138

AIX下输出为:
&&&&&&&&&&&&&&init!!!!!!
&&&&&&&&&&&&&&init!!!!!!
p1 = 30005730
p2 = 30005730

实际上有时候在AIX平台上会出现p1和p2的值完全不一样的情况。

请问为什么?static不是只走一次构造函数吗?!
...全文
255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangtao7773168 2012-05-24
  • 打赏
  • 举报
回复
楼主截图看看到底是不是P1跟P2不一样呢 不太相信不一样哈
machyang 2012-05-14
  • 打赏
  • 举报
回复
这是不是一个单例模式,单例模式不是构造函数为私有的吗?p1和p2的值不同,会不会是你的构造函数是公开的原因?
我刚解除C++,求解!
chinaliu123 2011-10-24
  • 打赏
  • 举报
回复
我在aix5.3上和在windows上是一样的。
  • 打赏
  • 举报
回复
不太了解
叶子 2011-08-28
  • 打赏
  • 举报
回复
p1和p2的值完全不一样的情况?不理解,没图没真相。
xunxun 2011-08-26
  • 打赏
  • 举报
回复
对cc不了解
shenghuiping2001 2011-08-26
  • 打赏
  • 举报
回复
还是我来解释一下:
aix 上缺省的是C++ 编译器为xlc, 而C的编译器有三种:

cc: 这是最习惯用的,扩展模式的C的编译器。

xlc : ANSI C 编译器,使用unix 的头文件

C89 ANSI 编译器, 使用ANSI 头文件。

你在window 使用的编译器是 cc 编译器吧。在aix 上使用的unix 的头文件。

解决方法:

使用相同的头文件,使一下。

至于你说的 “AIX平台上会出现p1和p2的值完全不一样的情况”有点奇怪。
jackyjkchen 2011-08-26
  • 打赏
  • 举报
回复
aix用的啥编译器?
帅得不敢出门 2011-08-26
  • 打赏
  • 举报
回复
linux 输出跟 win 是一样的.

aix为什么会如此,不解.

1,194

社区成员

发帖
与我相关
我的任务
社区描述
该论坛主要探讨IBM AIX平台的安装、部署、应用开发等话题,并为网友们提供自由交流的平台。
社区管理员
  • IBM AIX社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧