gpt4 book ai didi

c++ - 在单个(成员)函数的范围之外应用 RAII

转载 作者:行者123 更新时间:2023-11-30 02:51:37 25 4
gpt4 key购买 nike

我有一个单例“管理器”对象,它在流程开始时被实例化并在流程持续期间(有效地)存在。

该对象在其生命周期内使用“new”创建多个临时任务(它们本身就是对象),随后使用“delete”销毁它们。这两个操作在两个不同的函数中执行 - 一个函数由外部对象调用以执行特定任务,另一个函数是在任务完成时调用的回调函数,因此任务对象随后被销毁。

由于任务对象不是在“临时”范围内创建/销毁的(例如单个成员函数),我是否在浪费时间尝试在这种情况下应用 RAII?或者我应该使用一种机制来处理这个问题吗?

问候,理查德。

最佳答案

您可以使用智能指针(例如 shared_ptr)。单例应包含指向这些任务的指针容器(例如 map ),并在完成后将其从 vector 中移除。

例如(未编译,仅供说明):

class MySingleton
{
typedef std::shared_ptr<Task> TaskPtr;
std::map<int, TaskPtr> m_tasks;

StartTask()
{
TaskPtr task = std::make_shared<Task>();
m_tasks[index] = task;
...
}

OnTaskEnd()
{
TaskPtr task = m_tasks[index];
m_tasks.remove(index);
taskCompletedHandler(task);

// Unless taskCompletedHandler copies task, it will be destroyed when this leaves scope.
}

关于c++ - 在单个(成员)函数的范围之外应用 RAII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19617333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com