bekam ich eine Frage über Zeiger:C++ | Verfahren Umfang Zeigerverwaltungs
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 ist eine abgeleitete Klasse von CClientApp.
Muss ich den Test löschen? Denn wenn ich das tue, erhalte ich eine Zugriffsverletzung. Ich nehme an, dass ist, weil "Anfrage" einen Zeiger auf einen Zeiger zurückgibt, der innerhalb eines Vektors ist, also wenn ich es dereference und lösche es, würde es das Objekt im Vektor löschen, der/wird noch verwendet werden?
Dies ist eher eine allgemeine Frage. Muss ich jeden Zeiger oder nur Zeiger löschen, die dynamisch mit "new" zugewiesen werden?
Ich hoffe, dass mir jemand helfen kann.
Wenn Sie 'reinterpret_cast' brauchen, ist in diesem Fall etwas sehr falsch. Können Sie bitte ein [MCVE] angeben? –
Sorry, ich habe es bearbeitet und versucht es verständlich zu machen. – user7814615