gpt4 book ai didi

c++ - 库初始化和关闭的通用模式?

转载 作者:可可西里 更新时间:2023-11-01 16:37:55 27 4
gpt4 key购买 nike

是否有一种模式可用于调用底层 (C) 库所需的初始化和清理例程?就我而言,我想创建包装器类,以便它可以组合到其他对象中。问题是,当我销毁包装类时,会调用底层库的清理例程。这很好,直到我实例化我的包装类的多个对象。我的问题是真正处理这种情况的最佳方法是什么?我想到了一个静态引用计数器,但我想知道是否还有其他可能更好的选择和涉及的交易。

最佳答案

如果可以在 main 启动之前调用初始化,并在 main 结束之后调用清理,这个小技巧(hack?)可能对你有用:

#include <iostream>

// C library initialization routine
void init() {std::cout << "init\n";}

// C library cleanup routine
void fini() {std::cout << "fini\n";}

// Put this in only one of your *.cpp files
namespace // anonymous
{
struct Cleaner
{
Cleaner() {init();}
~Cleaner() {fini();}
};
Cleaner cleaner;
};

int main()
{
std::cout << "using library\n";
}

输出:

init
using library
fini

它利用(滥用?)静态对象的构造函数在 main 之前调用而析构函数在 main 之后调用的事实。这就像整个程序的 RAII。

关于c++ - 库初始化和关闭的通用模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216029/

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