5,530
社区成员




void main()
{
Character* character = new King();
character->fight();
WeaponBehavior* pWeapon = new KnifeBehvior();
character->SetWeapon(pWeapon);
character->fight();
WeaponBehavior* pAnotherWeapon = new SwordBehavior;
character->SetWeapon(pAnotherWeapon);
delete character;
character = 0;
}
//用auto_ptr更好,只要别把指针穿来传去得:
void main()
{
std::auto_ptr<Character*> character(new King());
character->fight();
std::auto_ptr<WeaponBehavior*> pWeapon (new KnifeBehvior());
character->SetWeapon(pWeapon);
character->fight();
std::auto_ptr<WeaponBehavior*> pAnotherWeapon (new KnifeBehvior());
character->SetWeapon(pAnotherWeapon);
}
void main()
{
Character* character = new King();
character->fight();
WeaponBehavior* pWeapon = new KnifeBehvior();
character->SetWeapon(pWeapon);
character->fight();
WeaponBehavior* pAnotherWeapon = new SwordBehavior;
character->SetWeapon(pAnotherWeapon);
delete character;
character = 0;
}
WeaponBehavior* Character::SetWeapon(WeaponBehavior* w)
{
WeaponBehavior* pRetWeapor = NULL;
if(m_weapor != w)
{
pRetWeapor = m_weapor;
m_weapor = w;
}
return pRetWeapor;
}
void main()
{
Character* character = new King();
character->fight();
WeaponBehavior* pWeapon = new KnifeBehvior();
character->SetWeapon(pWeapon);
character->fight();
WeaponBehavior* pAnotherWeapon = new SwordBehavior;
WeaponBehavior* pNeedFreeWeapon = character->SetWeapon(pAnotherWeapon);
if(pNeedFreeWeapon)
{
delete pNeedFreeWeapon;
pNeedFreeWeapon = NULL;
}
delete character;
character = 0;
}
Character::~Character() //pWeapon 在这里释放
{
if (m_weapor != NULL)
{
delete m_weapor;
m_weapor = NULL;
}
}