/***************************************************************************
*
* Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
* $Id$
*
**************************************************************************/
/**
* @file ceshi.h
* @author yinjingcao(yinjingcao@baidu.com)
* @date 2014/08/22 14:09:53
* @version $Revision$
* @brief
*
**/
#ifndef CESHI_H
#define CESHI_H
#include <vector>
#include <iostream>
class ceshi
{
public:
void save();
void output();
private:
std::vector<void *> __ceshi__vec__;
};
#endif // CESHI_H
/***************************************************************************
*
* Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
* $Id$
*
**************************************************************************/
/**
* @file ceshi.cpp
* @author yinjingcao(yinjingcao@baidu.com)
* @date 2014/08/22 14:06:53
* @version $Revision$
* @brief
*
**/
#include "ceshi.h"
using namespace std;
void ceshi::save()
{
int tmp = 2;
__ceshi__vec__.push_back((void *)&tmp);
}
void ceshi::output()
{
cout << "ceshi------" << *(int *)__ceshi__vec__[0] << "------" << endl;
}
int main()
{
ceshi __ceshi__;
__ceshi__.save();
__ceshi__.output();
return 0;
}
/* vim: set ts=4 sw=4 sts=4 tw=100 */
观察结果,发现输出并不是2,原因大概可能是tmp销毁,导致指针指向的tmp位置的值已经改变,值为随机值
如果把类与main函数放到一起,
/***************************************************************************
*
* Copyright (c) 2014 Baidu.com, Inc. All Rights Reserved
* $Id$
*
**************************************************************************/
/**
* @file ceshi2.cpp
* @author yinjingcao(yinjingcao@baidu.com)
* @date 2014/08/22 14:21:34
* @version $Revision$
* @brief
*
**/
#include <iostream>
#include <vector>
using namespace std;
class ceshi2
{
public:
void save()
{
int tmp = 5;
__ceshi__vec__.push_back((void *)&tmp);
}
void output()
{
cout << *(int *)__ceshi__vec__[0] << endl;
}
private:
vector<void *> __ceshi__vec__;
};
int main()
{
ceshi2 __ceshi__;
__ceshi__.save();
__ceshi__.output();
return 0;
}
/* vim: set ts=4 sw=4 sts=4 tw=100 */
结果奇怪的正确了,tmp并没有销毁?原因究竟何在?