- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设计了一个写时复制基类。该类包含共享数据模型/CoW 模型中所有子项所需的默认数据集。
派生类也有仅属于它们的数据,但应该是该派生类的其他实例之间的 CoW。
我正在寻找一种简洁的方法来实现它。如果我有一个带有共享数据 FooDataPrivate 的基类 FooInterface 和一个派生对象 FooDerived。我可以创建一个 FooDerivedDataPrivate。
底层数据结构不会影响公开的 getters/setters API,因此它与用户如何与对象交互无关。我只是想知道这是否是此类情况的典型 MO,或者是否有更好/更清洁的方法?
引起我兴趣的是,我看到了私有(private)数据类之间的继承潜力。例如。 FooDerivedDataPrivate:公共(public) FooDataPrivate,但我没有看到在我的派生类中利用该多态性的方法。
class FooDataPrivate
{
public:
Ref ref; // atomic reference counting object
int a;
int b;
int c;
};
class FooInterface
{
public:
// constructors and such
// ....
// methods are implemented to be copy on write.
void setA(int val);
void setB(int val);
void setC(int val);
// copy constructors, destructors, etc. all CoW friendly
private:
FooDataPrivate *data;
};
class FooDerived : public FooInterface
{
public:
FooDerived() : FooInterface() {}
private:
// need more shared data for FooDerived
// this is the ???, how is this best done cleanly?
};
最佳答案
这是一个 implementation of Copy-On-Write对于 C++。
关于CoW、继承类和可变共享数据的 c++ 设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2795351/
我几乎完成了我的 Bulls and Cows 项目,但是如果我输入一个单词或一系列重复字母或数字的数字,代码的“cow”部分就会出错。例如:考虑以下内容 Enter something that y
我有一条记录,see this question了解背景信息。 TDigits = AnsiString; //Should be `= array of NativeUInt`, but stri
我正在研究 swift 中写时复制的工作原理。有点被 isKnownUniquelyReferenced 弄糊涂了documentation .特别是本节: If the instance passe
我正在尝试删除字符串中的所有括号。没有考虑太难,我只是做了一个简单的正则表达式替换(即问题不是特别是关于摆脱任意级别的嵌套括号,但如果你愿意,请随时在评论中提出更好的方法). use regex::R
我是trying to implement a flexible type system at runtime in Rust .到目前为止,这是我所拥有的: use std::borrow::Cow
我正在尝试实现以下代码,它从 Cow 的切片中删除前缀的。 fn remove_prefix(v: &mut [Cow], prefix: &str) { for t in v.iter_mu
我设计了一个写时复制基类。该类包含共享数据模型/CoW 模型中所有子项所需的默认数据集。 派生类也有仅属于它们的数据,但应该是该派生类的其他实例之间的 CoW。 我正在寻找一种简洁的方法来实现它。如果
在 Linux 中,无论何时 fork 一个进程,父进程的内存映射都会被克隆到子进程中。实际上,出于性能原因,页面被设置为写时复制——最初它们是共享的,如果两个进程之一写入其中一个,它们将随后被克隆(
任何人都可以指出 Copy-on-write (COW) 的线程安全实现吗?成语? this site 上的示例代码看起来不错——它是线程安全的吗? 如果有人想知道我将用它做什么:我有一个 Foo具有
我理解解决方案的 DP 部分,但我不理解“追溯”部分,以及如何找到 i 设置位的 j 个长度数字的数量有助于解决问题?解决方案的粗体部分让我感到困惑。 问题: Being a secret compu
当父进程fork子进程时(linux下),我想一开始就把父进程中的一些内存页复制到子进程的地址空间,也就是说,不需要等待复制写时(牛)。有什么机制支持这个吗?谢谢:-) 最佳答案 我不知道有任何接口(
我早就知道 GCC 使用 COW(写时复制)来处理 std::string ,导致无法使用 std::string在多线程程序中。但据我所知,C++11 禁止使用 COW 的实现,因为线程现在由标准定
我有这个设置: use std::borrow::Cow; fn encode_text>>(text: T) {} fn encode_texts>>(texts: &[T]) { for
移动 API 以使用时 Cow ,必须更换: some_func(arg1, arg2, arg3); 与: some_func(Cow::from(&arg1[..]), Cow::from(&ar
我想将 SmallVec 与 Cow 一起使用。我试过这个: use smallvec::SmallVec; use std::borrow::Cow; fn main() { let s =
我在一个容器中使用 boost::scoped_array,我想进行写时复制,但我担心 scoped_array 无法工作。哪个 boost::smart_ptr 容器最接近 cow-safe 作用域
在linux中,因为浪费,我知道是COW实现的。但是,在书中说,当子进程在 fork() 之后立即调用 exec() 时,地址空间永远不会被复制。但我认为如果 child 使用 exec(),这意味着
当我 fork 我的进程时,如何防止 GC 引发写时复制?由于我在我的程序中遇到了一些内存问题(我的 60 核 0.5Tb 机器上的内存不足,即使是相当小的任务),我最近一直在分析 Ruby 中垃圾收
我正在寻找一个用 C 编写的键 -> 值字典库,它支持理论上无限数量的廉价交易。 我想在内存中有一个字典,有数百个线程开始事务,可能修改字典,结束(完成)事务或可能中止事务。只有 50% 的时间这些线
当我 fork 我的进程时,如何防止 GC 引发写时复制?由于我在我的程序中遇到了一些内存问题(我的 60 核 0.5Tb 机器上的内存不足,即使是相当小的任务),我最近一直在分析 Ruby 中垃圾收
我是一名优秀的程序员,十分优秀!