我上过这堂课:
class CAppFramework : public IBaseApp
{
public:
CAppFramework( std::initializer_list< CClientApp* > input );
CAppFramework( );
~CAppFramework( );
void Create( ) override;
void Release( ) override;
std::vector< CClientApp* > GetClientApps( );
private:
std::vector< CClientApp* > m_ClientApps;
};
当我尝试将一个项目添加到m_ClientApps向量时,如下所示:
int main( )
{
CAppFramework appframework = CAppFramework( );
appframework.GetClientApps( ).push_back( new CTest( ) );
appframework.Create( );
appframework.Release( );
return 0;
}
失败了。向量的大小保持为0。
但是如果我添加这样的项目:
int main( )
{
CAppFramework appframework = CAppFramework( { new CTest( ) } );
appframework.Create( );
appframework.Release( );
return 0;
}
该项目已成功添加。这是为什么? 我希望有人可以帮助我。
再见,祝你有个美好的一天!
答案 0 :(得分:1)
std::vector< CClientApp* > GetClientApps( );
这会返回矢量按值。实际上是向量的副本,用于该函数的返回值。
appframework.GetClientApps( ).push_back( new CTest( ) );
这个push_back()
是一个返回的向量对象的新值,它是原始向量的副本,是在该表达式结束时立即销毁的临时值。 push_back()
没有任何用处。
您需要通过引用返回向量,而不是值:
std::vector< CClientApp* > &GetClientApps( );