primer obekt1; //Конструктор будет вызван автоматически уже на этой строчке primer *obekt2; //Указатель на динамический объектvoidOnStart()
{
obekt2 = new primer; //Конструктор выполняется вот тут
obekt.f1();
delete(obekt2); //Тут выполняется деструктор (отсутствие delete приведет к утечки памяти в момент завершения работы скрипта)
}
不要创建动态对象--你将不必使用现在和与这些对象有关的其他一切(但那样你将无法做很多事情)。
你想了解的不是现在的意义,而是与动态对象一起工作的意义......。
//////////////////////////////////////// 跟随我的文字(我无法摆脱引用):) //////////////////////////////////////////////////////////////
空白的OnStart()
{
//---
初步了解。
obekt.f1()。
}
//+------------------------------------------------------------------+
阶级入门
{
公众。
void f1();
primer()。
};
primer::primer()
{
Alert("我认为这里的初始化也只是在创建的时候")。
};
引子::f1()
{
int l[]。
ArrayResize(l,3)。
l[0]=87;
l[1]=67;
l[2]=57;
ArrayResize(l,5)。
l[3]=47;
l[4]=37;
Alert(l[0]," ",l[1]," ",l[2]," ",l[3]," ",l[4]) 。
};
这段代码没有产生错误,而且数组是动态的。为什么????
而如果你想摧毁它。
{
obekt。
obekt.f1()。
}
似乎他们把C++的地址处理搞得一团糟,然后把它放到了MQL中。
220Volt:
这是我的文字(我无法摆脱引用):)
这段代码没有出现错误,而且数组是动态的。为什么????
1.为什么要在执行时出现错误?
a) 该对象被自动创建(这是由OnStart中声明对象实例的方法引起的),并被自动删除
至于对象,其实例可以自动或动态地创建。在第一种情况下,构造函数通常在初始化时执行,在第二种情况下,它在使用new 操作符后执行。
b) 从逻辑上讲,f1()中也不应该有错误(尽管我个人会以不同的方式实现它)。
至于动态数组。它们与静态数组的不同之处在于,这样的数组没有已知的维度,这意味着在你处理这样的数组之前,你应该用ArrayResize 来指定它(你应该在数组的第一个维度上 指定一个新的大小)。需要注意的是,数组元素的编号是从0开始的。
2.如果你对动态对象的工作感兴趣,请仔细研究这个例子--俄罗斯方块(虽然我在老论坛上仍然无法理解它的作用)...
我很抱歉打扰你,我只是真的想弄清楚这件事的真相。我来告诉你我错在哪里。
如果我们看一下C++的符号(我们有一个声明的底层类)
引子 *ukazatel=新引子。
说,ukazatel包含内存中的地址,我们的对象,即底层类的一个副本,被存储在那里。从MQL地址被删除,而ukazatel包含一个对象描述符。我们能从中得到什么?我注意到的唯一区别是,如果我们在程序块中通过新的对象进行声明,并且在完成程序块之前忘记使用delete,那么该对象将在程序完成后才被删除。而在退出区块后,通过句柄与该对象的连接将被丢失。
我曾想过,如果通过new声明,那么该对象的内存是动态分配的(即可以增加其大小),如果没有new,那么该对象只能有静态变量。但我的假设没有得到证实(我之前发布的脚本,对象不是通过new声明的,而是处理了一个动态变量)。
而在所有这些激情之后,我处于一个不太好的境地,我不明白有新的或没有新的有什么区别,如果编译器本身修复了那里的东西,我为什么要麻烦呢?
甚至试图做一些像文件中描述的事情(找出一些新的东西)。
switch(5)
{
案例5:m_shape=new CTetrisShape1; //这个选项根本不起作用(这是来自于文档的内容! !)。!!!)只有这种方式
( m_shape=new CTetrisShape1; )
}
而现在我们不能访问m_shape.___对象,将显示一个错误
220Volt:
而现在我发现自己在经历了这些激情之后,处境不是很好,我不明白有新的或没有新的有什么区别,如果编译器修复了那里的东西,我为什么还要去打扰呢?
对象实例是使用new if操作符动态创建的(这就是为什么我要求看俄罗斯方块的例子)。
1.对象实例的数量事先是不知道的(但假定总是有一个以上的实例)。
2.如果人们想创建一个指向 "异质 "对象的指针数组,这些对象有相同的祖先。
3.如果这个对象(或者说这个对象的一个指针)将被用作一个过程或函数的参数(你可能应该把它传递给库)。
4.如果打算在程序的不同部分用一个对象(读作:这个对象的指针)来工作。例如,同一个对象 "订单 "可以在:专家顾问创建的订单阵列;某个符号的订单阵列;形成某个位置的订单阵列,等等。
5.还有很多任务是通过应用动态创建的誓约和指针来解决的。
甚至试图做一些像文件中描述的事情(找出一些新的东西)。
........................
而现在我们不能访问m_shape.___对象,将抛出一个错误
实际上,在俄罗斯方块的例子中,它是以如下方式实现的(注意在你的例子中缺少断裂运算符)。
不要忘记检查指针是否为NULL
开发人员。
在文档中,请 "明确 "说明所有在测试器中不工作的东西,或与某些功能一起工作的东西(这样就不会出现不必要的问题)。
例如,你应该明确提到当地时间 和GMT时间(等同于服务器时间)的特殊性,以及TimeGMTOffset的问题性,以获得预期的结果。
谁知道 -- 是否有一种正常的方法可以将Unicode字符阵列翻译成字符串?
谁知道 -- 是否有一种正常的方法可以将Unicode字符阵列翻译成字符串?