C++ |方法范围指针管理



我有一个关于指针的问题:

class CAppFramework : public IBaseApp
{
public:
    CAppFramework( std::initializer_list< CClientApp* > input );
    CAppFramework( );
    ~CAppFramework( );
    void Create( ) override;
    void Release( ) override;
    template< class T > T** Request( std::string c_appname )
    {
        for ( auto c_app : m_ClientApps )
        {
            if ( c_app -> GetName( ) == c_appname )
            {
                T** t_app = reinterpret_cast< T** >( c_app );
                return t_app;
            }
       }
       return nullptr;
   }
   std::vector< CClientApp* >& GetClientApps( );
private:
   std::vector< CClientApp* > m_ClientApps;
};

void CTest::Create( )
{
    std::cout << "Ayye" << std::endl;
    CTest* test = *( m_Framework->Request< CTest >( 
    "Test" ) );
    test -> RunTest( );
}

CTest是来自CClientApp的派生类。

我需要删除测试吗?因为如果我这样做,我就会收到访问冲突。我想这是因为"请求"返回指向矢量内指针的指针,所以当我取消引用并删除它时,它会删除矢量中的对象,该对象将/可能仍然被使用?

这更像是一个普遍的问题。我是否需要删除每个指针或仅删除使用"new"动态分配的指针?

我希望有人能帮助我。

你显然不需要删除每个指针,否则你将不得不编写这样的代码:

 int main( int argc, char ** argv ) {
      // stuff
      delete argv;
 }

如果您使用 new 显式创建某些内容并将指针分配给 new 为您提供原始指针,那么您需要delete该指针。当然,这很容易出错,并且不能成为异常安全的,因此您应该使用 std::unique_ptr 和 std::make_unique 之类的东西。

最新更新