Lock::DBLock dbLock(txn->lockState(),ns.db(),MODE_X);
我试图理解这个声明在C术语中做了什么(即我想要理解语法,而不是关于正在发生的功能的具体细节).
这分为两个主要问题:
1)函数前面的Lock :: DBLock语句的用途是什么?
2)这是函数调用还是函数声明?
它声明了一个类型的变量;
Lock::DBLock
该变量称为dbLock.它使用txn-> lockState(),ns.db()和MODE_X调用构造函数.
我的猜测是txn-> lockState实际上返回一个锁对象,我们锁定的东西是ns.db() – 在“独占模式”.但这是猜测,你必须在环境中查看这些内容.
在没有查找文档的情况下,我希望Lock :: DBLock是一个“锁定管理器”,换句话说,它在创建时获取锁定,并在销毁时释放.
一个简单的锁管理器看起来像这样:
class LockMgr { LockMgr(SomeLockType &X) : keeper(X) { keeper.Lock(); } ~LockMgr() { keeper.Unlock(); } private: SomeLockType& keeper; // Must be reference to original lock };
当变量超出范围时,会自动调用析构函数(更糟糕的是,当您离开变量所在的{}对时.
在C中,“资源处理”的一个通用策略称为RAII(资源获取是初始化) – 变量用于保存资源,并在初始化期间分配.这有很多帮助“不要忘记撤消” – 例如在函数中间返回的代码中,确实中断退出循环或类似的东西.在C中,你总是要注意释放锁,关闭文件,释放内存等等 – 当然,如果你以错误的方式使用C,你可能会陷入同样的陷阱 – 调用new肯定需要一个调用delete,直接调用lock Lock()成员函数需要在某处调用Unlock().但是如果我们将资源“包装”到一个持有它的对象中我们需要它,并在析构函数中自动“释放”(释放,解锁等),就不需要记住释放内存,解锁,等等
我建议在提出进一步的问题之前,先阅读关于类和构造函数的第一章. your C++ book中的析构函数对(你有一本书,对吧?)
总结以上是内存溢出为你收集整理的理解有经验的C程序员的C语法全部内容,希望文章能够帮你解决理解有经验的C程序员的C语法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)