gpt4 book ai didi

c++ - 如何在C++中模拟析构函数调用的逆序?

转载 作者:行者123 更新时间:2023-11-28 06:35:36 25 4
gpt4 key购买 nike

我想将一些信息从基础对象传播到派生对象。只有一个问题:我想在对象销毁时执行此操作。

具体任务是报告一个时间度量:

class Counter {
using Clock = std::chrono::steady_clock;
using TimePoint = std::chrono::time_point<Clock>;
TimePoint start_ = Clock::now();

public:
~Counter() { /* Propagate |start_| and |Clock::now()| */ }
};

不能这样做,因为派生虚方法 Report() 已经不存在了:

class Counter {
using Clock = std::chrono::steady_clock;
using TimePoint = std::chrono::time_point<Clock>;
TimePoint start_ = Clock::now();

virtual void Report(TimePoint, TimePoint) = 0;

public:
virtual ~Counter() { Report(start_, Clock::now()); }
};

我假设存在某种针对此类任务的设计模式 - 您能提供一些建议吗?

最佳答案

让基类在析构函数树运行之前提供功能在引用计数实现中很常见,但同样的方法可以轻松地为您工作。

class Base
{
using Clock = std::chrono::steady_clock;
using TimePoint = std::chrono::time_point<Clock>;
TimePoint start_ = Clock::now();

protected:
virtual void ~Base();

public:
void Release() { Report(start_, Clock::now(); delete this; }
};

现在用户需要调用 o->Release() 而不是 delete o。您可能希望为您的类专门化 std::make_unique,以便自动提供正确的删除器。

关于c++ - 如何在C++中模拟析构函数调用的逆序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830646/

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