gpt4 book ai didi

c++ - 一个元素大小的容器,具有自动删除功能,使用数据时,模式

转载 作者:行者123 更新时间:2023-11-28 05:46:40 25 4
gpt4 key购买 nike

我正在为下一个问题寻找模式或一些现成的解决方案:

Container with features:

  1. One element of an arbitrary type storing
  2. When element is taken from container it gets empty
  3. When new element is stored, it overwrites previous content
  4. Thread safety

我没有线程安全的天真实现:

template<typename T>
class Boxed {
T* _data;
public:
Boxed()
: _data(nullptr)
{}

Boxed(const T& data)
: _data(new T(data))
{}

~Boxed() {
if(_data != nullptr) {
delete _data;
}
}

inline
void setData(const T& data) {
if(_data != nullptr) {
delete _data;
}
_data = new T(data);
}

inline
T getData() {
T res(*_data);
delete _data;
_data = nullptr;
return res;
}

inline
bool empty() const {
return _data == nullptr;
}

inline
operator bool() cons {
return empty();
}
};

如有任何帮助,我将不胜感激。

最佳答案

使用大小为 2 的队列。使用互斥锁保护下划线数组/vector/双端队列。 push 和 pop 的逻辑很简单。推送时:如果不为空,则删除旧元素,插入新元素。弹出时:它为空或大小为 1,与普通弹出没什么特别的。所以它不会覆盖当前的但会替换它。差异是不可观察的。

签名:

class only_one
{
public:
bool push(T& e);
bool pop(T& e);
bool is_empty() const;
}

可以在 Internet 的许多角落找到使用 mutex/condition_var 的线程安全队列的实现。 Example

关于c++ - 一个元素大小的容器,具有自动删除功能,使用数据时,模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36085842/

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