D 是否可以从类中删除间接寻址?

D 是否可以从类中删除间接寻址?,d,D,我经常遇到phobos的某些部分是类,但通常我不需要多态性 比如说 我想写信 数组!纤维; 但是,光纤应该直接在阵列中分配 我已经看过了,但是它禁用了复制构造函数,并且不允许我移动类型,这使得它对我来说非常无用 即使您确定没有指向类引用的指针,移动类引用也是非法的。因此,移动作用域对象是非法的 编辑: 这是在结构内部分配类的正确方法吗 struct结构(T) if(is(T==类)){ 静态不变大小=uu特征(classInstanceSize,T); 空[大小]缓冲区; T; 别这样; 此(

我经常遇到phobos的某些部分是类,但通常我不需要多态性

比如说

我想写信

数组!纤维;
但是,光纤应该直接在阵列中分配

我已经看过了,但是它禁用了复制构造函数,并且不允许我移动类型,这使得它对我来说非常无用

即使您确定没有指向类引用的指针,移动类引用也是非法的。因此,移动作用域对象是非法的

编辑:

这是在结构内部分配类的正确方法吗

struct结构(T)
if(is(T==类)){
静态不变大小=uu特征(classInstanceSize,T);
空[大小]缓冲区;
T;
别这样;
此(Args…)(自动参考Args Args){
导入标准conv:emplace;
t=安放位置!t(缓冲区,参数);
}
}
简短回答:(将其设置为空块数组并放置到数组元素中)

正确答案:在这种情况下,您并不真正想这样做,也没有多大意义:)获取的大部分光纤内存来自堆栈分配,它不是
fiber
对象的一部分,而是单独分配的:


这意味着,在连续内存块中保留
Fiber
实例不会给您带来太多好处,因为碎片仍然存在。同时,通过破解类固有的多态语义,您会面临很大的风险,并在您的代码中添加一个风险点,这将需要您始终格外小心。

这不应该仅限于
纤维,这是一个更一般的问题。我根据你的回答更新了我的问题。是的,它是正确的。它仍然是非常脆弱的
@系统
级别的代码,您需要非常小心地维护它。