读书人

string的析构函数,该如何解决

发布时间: 2012-10-29 10:03:53 作者: rapoo

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
能正常输出?

读书人网 >C++

热点推荐