我有这样一个类:
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;
}正在成功添加该项目。为什么会这样呢?我希望有人能帮帮我。
再见,祝你有愉快的一天!
发布于 2017-04-05 21:32:10
std::vector< CClientApp* > GetClientApps( );这将通过值返回向量。实际上,为该函数的返回值创建了一个向量的副本。
appframework.GetClientApps( ).push_back( new CTest( ) );这个push_back()将一个新值添加到一个返回的向量对象中,该对象是原始向量的副本,这个临时值在这个表达式的末尾立即销毁。push_back()没有做任何有用的事情。
需要按引用返回向量,而不是按值返回:
std::vector< CClientApp* > &GetClientApps( );https://stackoverflow.com/questions/43232658
复制相似问题