理解有经验的C程序员的C语法
我正在查看MongoDB的源代码,并在函数内部看到以下声明,我不理解并且在我的C编程经验中没有看到.
Lock::DBLock dbLock(txn->lockState(),ns.db(),MODE_X); 我试图理解这个声明在C术语中做了什么(即我想要理解语法,而不是关于正在发生的功能的具体细节). 这分为两个主要问题: 解决方法
它是一个带有构造函数的变量声明 – 所以它是[对象构造函数]的函数调用和变量的声明.
它声明了一个类型的变量; 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中的析构函数对(你有一本书,对吧?) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |