string的析构函数
// 11111.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ZeroPtr.h"
#include <string>
#include <iostream>
using namespace std;
class CZeroPtr
{
public :
CZeroPtr()
: m_i(0xefefefef)
, m_str("Hello World !!")
{
}
~CZeroPtr()
{
m_i = 0xffffffff;
m_str = "Good Bye !!";
}
void Print(void)
{
std::cout << std::hex << "int : " << m_i << std::endl;
std::cout << "String : " << m_str << std::endl;
}
private:
int m_i;
std::string m_str;
};
class CZeroPtrTest
{
public:
static void Test();
};
void CZeroPtrTest::Test()
{
CZeroPtr *pZero = static_cast<CZeroPtr*>(0);
std::cout << " Zero Ptr Test :" << std::endl;
//pZero->Print(); // 1
{
CZeroPtr local;
pZero = &local;
std::cout << "Local Ptr Test : " << std::endl;
pZero->Print(); // 2
}
std::cout << "Local Ptr Test 2 : " << std::endl;
pZero->Print(); // 3
}
int main()
{
CZeroPtrTest zeroptr;
zeroptr.Test();
}
输出结果
// 11111.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "ZeroPtr.h"
#include <string>
#include <iostream>
using namespace std;
class CZeroPtr
{
public :
CZeroPtr()
: m_i(0xefefefef)
, m_str("Hello World !!")
{
}
~CZeroPtr()
{
m_i = 0xffffffff;
m_str = "Good Bye !!";
}
void Print(void)
{
std::cout << std::hex << "int : " << m_i << std::endl;
std::cout << "String : " << m_str << std::endl;
}
private:
int m_i;
std::string m_str;
};
void CZeroPtrTest::Test()
{
CZeroPtr *pZero = static_cast<CZeroPtr*>(0);
std::cout << " Zero Ptr Test :" << std::endl;
//pZero->Print(); // 1
{
CZeroPtr local;
pZero = &local;
std::cout << "Local Ptr Test : " << std::endl;
pZero->Print(); // 2
}
std::cout << "Local Ptr Test 2 : " << std::endl;
pZero->Print(); // 3
}
int main()
{
CZeroPtrTest zeroptr;
zeroptr.Test();
}
Zero Ptr Test :
Local Ptr Test :
int : efefefef
String : Hello World !!
Local Ptr Test 2 :
int : ffffffff
String :
请按任意键继续. . .
为什么string是空的?
[解决办法]
CZeroPtr local;
这个局部对象都被析构了你还能寄望pZero->Print(); // 3
能正常输出?