gpt4 book ai didi

c++ - 在嵌入式环境中替代 boost::shared_ptr

转载 作者:IT老高 更新时间:2023-10-28 22:36:32 35 4
gpt4 key购买 nike

我在具有 GCC 版本 2.95 的嵌入式 linux 环境中使用 C++。

我无法用 bcp 提取 boost::shared_ptr 文件,它太重了。

我想要的是 boost::shared_ptr 的简单智能指针实现,但没有所有 boost 开销(如果可能的话......)。

我可以想出我自己的版本阅读 boost 源,但我担心会漏掉一个或多个点,制造一个错误的智能指针似乎很容易,而且我不能承受有错误的实现。

那么,boost::shared_ptr(或任何引用计数等效智能指针)的“简单”实现或实现示例是否存在我可以使用或可以作为灵感的?

最佳答案

如果您不需要混合 sharedweak ptr,并且不需要 自定义删除器,则可以使用快速和肮脏的 my_shared_ptr:

template<class T>
class my_shared_ptr
{
template<class U>
friend class my_shared_ptr;
public:
my_shared_ptr() :p(), c() {}
explicit my_shared_ptr(T* s) :p(s), c(new unsigned(1)) {}

my_shared_ptr(const my_shared_ptr& s) :p(s.p), c(s.c) { if(c) ++*c; }

my_shared_ptr& operator=(const my_shared_ptr& s)
{ if(this!=&s) { clear(); p=s.p; c=s.c; if(c) ++*c; } return *this; }

template<class U>
my_shared_ptr(const my_shared_ptr<U>& s) :p(s.p), c(s.c) { if(c) ++*c; }

~my_shared_ptr() { clear(); }

void clear()
{
if(c)
{
if(*c==1) delete p;
if(!--*c) delete c;
}
c=0; p=0;
}

T* get() const { return (c)? p: 0; }
T* operator->() const { return get(); }
T& operator*() const { return *get(); }

private:
T* p;
unsigned* c;
}

对于任何对 make_my_shared<X> 感兴趣的人,它可以简单地实现为

template<class T, class... U>
auto make_my_shared(U&&... u)
{
return my_shared_ptr<T>(new T{std::forward<U>(u)...});
}

被称为

auto pt = make_my_shared<T>( ... );

关于c++ - 在嵌入式环境中替代 boost::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7792011/

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