logo
Contato | Sobre...        
rebarba rebarba

Rodrigo Strauss :: Blog


Tinha um bug no caminho, no caminho tinha um bug

O código C++ abaixo contém diversos bugs, e se comporta de forma estranha durante a execução (faça o teste em DEBUG). Quais são os bugs e por que eles acontecem?

//
// coloque esses include's no stdafx.h, se preferir
//
#include <iostream>
#include <vector>

//
// não consigo fugir do meu vício de programação Windows...
//
#ifndef DWORD
#define DWORD unsigned int
#endif

//
// vamos usar uma classe para facilitar a mudança
//
class CTest1
{
public:
	DWORD dwValue;
	std::string strValue;
};

class CTest2
{
private:
	CTest1* m_pTest1;
public:
	CTest2(DWORD dw, const std::string& str)
	{
		m_pTest1 = new CTest1();

		m_pTest1->dwValue = dw;
		m_pTest1->strValue = str;

	}
	~CTest2()
	{
		delete m_pTest1;
	}

	CTest1* GetTest1() const
	{
		return m_pTest1;
	}

};

int main()
{
	std::vector vecTest2;

	//
	// vamos colocar um CTest2 no vetor, passando
	// os valores para o construtor
	//
	vecTest2.push_back(CTest2(100, "1bit"));

	//
	// agora vamos pegá-lo e ver os valores
	//
        std::cout << "dwValue = "  << vecTest2[0].GetTest1()->dwValue  << std::endl;
        std::cout << "strValue = " << vecTest2[0].GetTest1()->strValue << std::endl;

	return 0;
}

No próximo post eu explico o bug. E em posts posteriores vou sugerir algumas formas de resolver o problema (sendo uma delas usando ATL, é claro!).


Em 06/04/2005 15:17, por Rodrigo Strauss


  
 
 
Comentários
rebarba rebarba
  ::::