我经常遇到phobos中的一些类,但通常我不需要多态。
例如,纤维
我想写
Array!Fiber fibers;但是,光纤应该直接分配在阵列中。
我看过范围,但它随后禁用了复制构造函数,并且不允许我移动类型,这使它对我来说非常无用。
移动类引用是非法的,即使您确信没有指向它的指针。因此,移动范围内的对象是非法的。
编辑:
这是在结构中分配类的正确方法吗?
struct Struct(T)
if(is(T == class)){
static immutable size = __traits( classInstanceSize, T);
void[size] buffer;
T t;
alias t this;
this(Args...)(auto ref Args args){
import std.conv: emplace;
t = emplace!T(buffer, args);
}
}发布于 2016-04-15 13:13:46
简单回答:https://dlang.org/library/std/conv/emplace.html (使其成为空块数组并嵌入到数组元素中)。
正确答案:在这种情况下,您并不真正想这样做,而且这没有什么意义:)大部分光纤内存来自堆栈分配,这不是Fiber对象的一部分,而是单独分配的:https://github.com/D-Programming-Language/druntime/blob/master/src/core/thread.d#L4320
这意味着,当碎片仍然存在时,在连续内存块中使用Fiber实例不会有多大好处。同时,通过对类固有的多态语义进行黑客攻击,并在代码中添加一个风险点,这将带来很大的风险,这将始终需要格外小心/关注。
https://stackoverflow.com/questions/36645003
复制相似问题