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




