首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从类中移除间接性?

是否可以从类中移除间接性?
EN

Stack Overflow用户
提问于 2016-04-15 10:44:07
回答 1查看 43关注 0票数 1

我经常遇到phobos中的一些类,但通常我不需要多态。

例如,纤维

我想写

代码语言:javascript
复制
Array!Fiber fibers;

但是,光纤应该直接分配在阵列中。

我看过范围,但它随后禁用了复制构造函数,并且不允许我移动类型,这使它对我来说非常无用。

移动类引用是非法的,即使您确信没有指向它的指针。因此,移动范围内的对象是非法的。

编辑:

这是在结构中分配类的正确方法吗?

代码语言:javascript
复制
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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 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实例不会有多大好处。同时,通过对类固有的多态语义进行黑客攻击,并在代码中添加一个风险点,这将带来很大的风险,这将始终需要格外小心/关注。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36645003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档