C++ |法范围指针管理
我有一个关于指针问题: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派生类。
我需要删除测试吗?如果我这样做,会导致访问冲突。 我想这是因为“请求”返回一个指向矢量内的指针的指针,所以当我解引用它并删除它时,它会删除该矢量中的对象,它可能仍会被使用?
这是一个更普遍的问题。我是否需要删除每个指针或仅使用“新”动态分配的指针?
我希望有人能帮助我。
你显然不需要删除每个指针,否则你会写这样的代码:
int main(int argc, char ** argv) {
// stuff
delete argv;
}
如果你明确地创建与new
的东西,并指定新的指针给你一个原始指针,那么你需要delete
那个指针。当然,这很容易出错,不能做成异常安全的,所以你应该使用像std :: unique_ptr和std :: make_unique。
这意味着我的函数CTest :: Create不会导致任何内存泄漏? – user7814615
不是很明显,但它完全不明显,它在做什么以及它为什么这样做。如果你必须提出这样的问题,我并不认为你有能力设计一个应用程序框架。 –
如果您需要'reinterpret_cast'在这种情况下,某件事情是错误的。你能提供[MCVE]吗? –
对不起,我编辑并试图使其可以理解。 – user7814615