首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-10-29 
string的析构函数// 11111.cpp : 定义控制台应用程序的入口点。//#include stdafx.h#include ZeroPtr.h

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

热点排行