例を挙げてください:
class A
{
public:
int value;
A():value(1){};
~A(){};
};
void Display( std::vector<A> myvector )
{
for( std::vector<A>::iterator it = myvector.begin(); it!= myvector.end(); ++it )
std::cout << (*it).value << std::endl;
}
A* GetAtId( DWORD id )
{
if( id != 0 )
{
static A ret;
return& ret;
}
return NULL;
}
void Serialize( DWORD obj[3] )
{
std::vector<A> vecHold;
for( int i=0; i<3; i++ )
{
A* ptr = NULL;
if( obj[i] != 0 )
{
ptr = GetAtId( obj[i] );
if( ptr ) vecHold.push_back( *ptr );
}
}
Display( vecHold );
}
int main( )
{
DWORD id[3] = {0,};
id[2] = 9;
Serialize( id );
}
への呼び出しに対して「存続」しDisplay
ますか? (これが「長寿命」という意味ではありません)
ポインターは次のブラケットで解放されるためです。std::vector<A*>vecHold
、などのポインターを格納するベクトルvecHold.push_back( ptr )
が不正であることはわかっていますが、この場合はどうでしょうか。