gpt4 book ai didi

C++:对象的引用计数器

转载 作者:行者123 更新时间:2023-11-28 08:07:39 26 4
gpt4 key购买 nike

我需要一个未在堆上分配的对象的引用计数器。

我需要它在无法轻易复制和销毁的对象上实现 RAII 机制:

class File
{
private:
int fd;
public:
File( const std::string &path ) ... // opening file
destroy( ); // actually closing file

File( const File &f ) ... // just copying the fd
~File( ); // doing nothing
}

对于像这样的场景,通常使用 std::shared_ptr:共享指针的对象的构造函数和析构函数只调用一次。

然而,在我的例子中,我宁愿避免在堆上分配对象。我需要一个 shared_object 类来完成类似于 std::shared_ptr 的工作,以便我的类的非复制构造函数和 destroy 函数(在上面的例子中)只被调用一次。

有这样的东西吗?

最佳答案

如果您希望在动态存储(“堆上”)中分配 时具有共享指针行为,您可以查看various smart pointer implementation strategies .在 Modern C++ Design ,作者在“智能指针”一章中讨论了其中的许多策略,即 freely (and legally) available online .

您会感兴趣的技术是引用链接。使用这种技术,智能指针对象在双向双向链表中链接在一起,而不是指向动态分配的引用计数器。


综上所述,使用 std::shared_ptrstd::unique_ptr 或它们的 Boost 变体可能会编写得更快并且更易于维护。如果动态分配和引用计数曾经是瓶颈(我怀疑它会是,但我们不能仓促概括),您总是可以花时间使用自定义引用链接版本。

关于C++:对象的引用计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935911/

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