模板参数=void*的编译器错误 - 页 19

 
pavlick_:

自毁?- 这是新的 :)。

是的,自毁。我想你应该知道这是 "堆栈 "对象和动态对象之间的区别--它们不会问你什么时候删除自己,而是在退出源程序块时进行删除 :)
 
Ilya Malev:
是的,自我毁灭。我想你应该知道这是 "堆栈 "对象和动态对象之间的区别--它们不会问你什么时候删除自己,而是在退出源程序块时进行删除 :)

你可能听说过复制/移动构造函数/操作器,对吗?

obj o;
{
   obj q;
   o = q;
   o = move(q);  // С++ вариант, более эффективный
}
 
pavlick_:

你可能听说过复制/移动构造函数/操作器,对吗?

因此,我们会注意那个关键时刻,并这样复制它,只要我们不太晚?:lol:

只是因为我们真的不喜欢OOP,还是有其他不可告人的原因?

 
Ilya Malev:

因此,我们会注意那个关键时刻,并这样复制它,只要我们不太晚?:lol:

只是因为我们真的不喜欢OOP,还是有其他不可告人的原因?

当然,还能有什么呢?作为一个合格的程序员,你也必须通过堆栈管理动态对象(RAII技术)。

{
   unique_ptr<Class> p(new Class);
   ...
   // ой, самоуничтожение :)
}
 
而且,地狱,我们将为它建立大量的包装器。因为多态性的 利基并不那么重要,但我们的拐杖却有一整个领域的应用,如果我们不使用OOP :哭。
 
pavlick_:

当然,不然怎么会这样呢?作为一个体面的程序员,你也必须通过堆栈对象来管理动态对象(RAII技术)。

你是说收垃圾的人吗?)))),或者计算参考文献的数量。我最近一直在练习这些东西。但不幸的是,所有这些方法的性能在µl中都很差。

 
通过堆栈管理din.object意味着要为每个对象分配额外的24字节的内存(这就是这种 "堆栈指针 "+对象本身的引用的 "重量")。加上速度方面的时间成本一点也不小。总的来说,所有这些都是相当可悲的。但我们也不觉得有什么大的需要在里面。俗话说,恐惧有很多的眼睛。如果我们对空间站进行编程,那么你就不能不进行严格的控制。但就像现在这样,有了微调的阶级系统,没有它一切都好办。
 

不,不是关于垃圾收集器,而是关于智能指针 - unique_ptr, shared_ptr (with reference counting), RAII很容易被搜索到。 一般来说,unique_ptr在内存方面没有额外的成本(包装器==指针大小),而且调用是过度优化的,但在μl中,一切都很悲哀,是的。但这里也不需要(聪明的指路人)。

 
pavlick_:

或者你可以采用这些模板,写一些类似的东西。

https://www.mql5.com/ru/forum/295485/page18#comment_9971363

按钮也是独立于细节的,没有所有的多态性和接口。多态性有它自己的利基,但它比他们说的要窄得多。

在这样一个简化的例子中,模板看起来当然更方便。事实上,你甚至不需要一个模板,因为你只有一个实例。

 
Alexey Navoykov:

这个简化的例子当然使模板看起来更方便。事实上,你甚至不需要一个模板,因为你只有一个实例。

通过g 的按钮灯与虚拟性。

struct SwitchableDevice {
    virtual void switchOn() = 0;
    virtual void switchOff() = 0;
};
struct Lamp : SwitchableDevice {
    void switchOn(){std::cout << "shine bright" << std::endl;}
    void switchOff(){std::cout << "i am not afraid of the dark" << std::endl;}
};
struct Button {
    SwitchableDevice& dev;
    bool state = false;
    Button(SwitchableDevice& d) : dev(d) {}
    void buttonPress(){
        if (state) { dev.switchOff(); }
        else       { dev.switchOn();  }
        state = !state;
    }
};
int main(){
    Lamp lamp;
    Button button(lamp);
    button.buttonPress();
    button.buttonPress();
}

老生常谈的例子。