MQL5中的OOP问题 - 页 6

 
Dmitry Fedoseev:

所以,你去那里。

像这样。

甚至不只是可以,而是更好,因为你可以这样称呼它。

如果你通过引用传递一个指针,你需要另一个变量来存放指针。

***

而如果你必须向一个函数传递一个指针,以便在该函数中创建一个对象,这就是它的工作原理。

这基本上是你想知道的关于OOP的所有内容,但却不敢问))

哼哼

 
void z(CObj* & o){
   o = new CObj();
}

就这样想吧,这一切都很有效。

因此,如果你有任何关于OOP的问题,请随时联系))))。

 
一个经典的空指针脱引法变成了。
 
Vladimir Simakov:

因此,如果你有任何关于OOP的问题,请随时))))。

请解释使用new操作符创建动态对象的含义。

当一个对象被自动创建时,在堆栈中创建一个类对象,在执行时间 上比动态对象更快。
当一个对象被动态创建时,类对象在内存中(在堆中)被创建,操作系统的内存管理器被激活,这个过程会比较慢。

以下是问题。
如果自动创建更快,那么为什么使用动态对象更好呢?
明确控制内存分配?
消除了可能出现的堆栈溢出?
而不是意外地失去一个物体?
因为如果堆栈溢出,该对象将被自动删除?

 
Roman:


你不觉得跟上这个话题很累吗?

 
Artyom Trishkin:

你不觉得跟上这个话题很累吗?

调整问题,使之尽可能的准确。
这有什么问题吗?有一个编辑按钮,所以你可以用它来说明问题。

 
Roman:

请解释用new操作符创建动态对象的含义。

当一个对象被自动创建时,类对象被创建在堆栈中,就执行时间 而言,它比动态对象更快。
当一个对象被动态创建时,类对象在内存中(在堆中)被创建,操作系统的内存管理器被激活,这个过程会比较慢。

以下是问题。
如果自动创建更快,那么为什么使用动态对象更好呢?
明确控制内存分配?
消除了可能出现的堆栈溢出?
而不是意外地失去一个物体?
因为如果堆栈溢出,该对象将被自动删除?

你为什么不读读静态内存、堆栈和堆的知识?
 
Roman:

请解释用new操作符创建动态对象的含义。

如何使用的一个明显的例子是当对象的类型事先不知道时。

以下是帮助中的一个很好的例子:https://www.mql5.com/ru/docs/basis/operators/newoperator

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
//| Создание фигуры                                                  |
 
Vladimir Simakov:

哼哼

是的!除了所有的东西都能编译,而且由于某种原因能工作。

你那里有什么样的奇迹......。没有人知道,但顺便说一句,在昨天的代码样本据说是从这个主题的其他地方取来的,但实际上是在其他地方丢失的,这并不令人惊讶。

***

哦,如果你没有忘记我们最初讨论的内容--关于传递指针到一个函数或方法(以及关于你声称的一些内存泄漏据说发生在那里),这正是&不需要的地方。


 
Roman:

请解释通过new操作符创建动态对象的目的。

当一个对象被自动创建时,类对象在堆栈中被创建,在执行时间 上比动态对象快。
当动态创建一个对象时,一个类对象是在内存中(在堆中)创建的,因此涉及到操作系统的内存管理器,这个过程会比较慢。

以下是问题。
如果自动创建更快,那么为什么使用动态对象更好呢?
明确控制内存分配?
消除了可能出现的堆栈溢出?
而不是意外地失去一个物体?
因为如果堆栈溢出,该对象将被自动删除?

如果事先知道对象的数量,并且在程序运行期间是恒定的,那么就不需要新建。在所有其他情况下--新的。