C ++ |无法将项目添加到类成员向量中

时间:2017-04-05 13:28:29

标签: c++ vector

我上过这堂课:

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;
}

该项目已成功添加。这是为什么? 我希望有人可以帮助我。

再见,祝你有个美好的一天!

1 个答案:

答案 0 :(得分:1)

std::vector< CClientApp* > GetClientApps( );

这会返回矢量按值。实际上是向量的副本,用于该函数的返回值。

appframework.GetClientApps( ).push_back( new CTest( ) );

这个push_back()是一个返回的向量对象的新值,它是原始向量的副本,是在该表达式结束时立即销毁的临时值。 push_back()没有任何用处。

您需要通过引用返回向量,而不是值:

std::vector< CClientApp* > &GetClientApps( );