2311d更好C析构类

原文

我在betterC模式下自定义了object.d并创建了新(NEW)模板,使用模块,似乎可在没有extern(C++)模式时创建,且调用函数中的转换类型似乎工作正常.

但是当析构时没有找到调用相应子类的__xtdor()方法,是否可正确执行__xtdor()?

我只是定义了一个空的对象类,在编译时选择object.d文件,就可用该类了,函数参数也可用接口.

析构函数没找到正确的子类对象.

以下是亚当的:这里

特别在此:

cpp 复制代码
void destroy(bool initialize = true, T)(T obj) if (is(T == class))
{
(..)
    else
    {
        //绕过重载opCast
        auto ptr = (() @trusted => *cast(void**) &obj)();
        rt_finalize2(ptr, true, initialize);
    }
}

接口:

cpp 复制代码
cast(Object)obj

但我怀疑你必须实现整个typeinfo.

不幸,D的类不能有虚析构器,因此在运行时,只能用TypeInfo来找到正确的子类析构器.

最好实现自己的虚析构器,及知道如何调用它们的析构(destroy)函数;如:

cpp 复制代码
interface BettercDestructible
{
    void destruct() nothrow @nogc;
}

class MyClass : BettercDestructible
{
    //...
    override void destruct()
    {
        //析构器实现在此
    }
    ~this() { this.destruct(); }
}
void destroy(BettercDestructible obj)
{
    obj.destruct();
}

当然,对未实现BettercDestructible的类,就不行了,但总比啥也没有好.

相关推荐
fqbqrr3 个月前
2407d,D2024三月会议
d
fqbqrr6 个月前
2403d,d的com哪里错了
d
fqbqrr8 个月前
2402d,d的变参
d
fqbqrr8 个月前
2401d,ddip1027如何支持sql
d
fqbqrr8 个月前
2401d,讨论d串滑动参数
d
fqbqrr9 个月前
2312d,D语言单元测试等
d
fqbqrr9 个月前
2312d,d语言作为胶水,用C++调用rust
c++·rust·d
fqbqrr9 个月前
2312d,把alloca注入调用者域
d
fqbqrr9 个月前
2312d,d语言来绑定C++和rust
c++·rust·d
fqbqrr10 个月前
2311ddip1000不能从函数返回域引用
d