我有一个关于指针的问题:
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 之类的东西。