MQL5 编译器不区分类和它的指针 - 页 7

 
Alexey Navoykov:
所以你提议完全禁止指针的隐式命名? 我想这里的很多人不会对此感到高兴。

让每个人都有一个选择。

#property strict

我当然不希望有这种把戏。

 
SemenTalonov:

嗯,这不用说了。有一个内存泄漏。

你说是内存泄漏吗?这个怎么样?)))

#property strict

class A
 {
  A*  item;
  int num;
public:
  A(int p=10){num=p;item=NULL;} ~A(){if(CheckPointer(item)==POINTER_DYNAMIC) delete item;}
  A* operator=(A* par){ item = par; return&this; }
  A* operator~(){ return item; }
  int operator-(){ return num; }
 };

void OnStart()
 {
  A a = new A(20);
  printf("В автообъекте %i (%i) сохранен динамический объект %i (%i), который он в конце своего цикла сам уничтожает...",&a,-a,~a,-~a);
 }


 
Ilya Malev:

你说是内存泄漏吗?这个怎么样?)))


delete item;

因此,它假定受试者已经准备好被这样对待。有多少人预见到这种可能性?

 
SemenTalonov:

因此,这假定对象准备被这样对待。很多人规定了这种可能性吗?

我认为,如果有人写了new这个词,他们应该清楚地知道相应的delete这个词在代码的其他地方的位置。

 
顺便说一下,这种结构,如果稍微精致一点,就叫做 "垃圾收集器"))
 
SemenTalonov:

让每个人都有一个选择。

我当然不需要这种伎俩。

我已经在MQL4中使用它。如果语言语法 相同,那么它将如何工作?

那么,作为对这种行为的保护,我们可以在一个类中创建一个私有方法。

class A
{
 private: void operator=(const A*);
}

坦率地说,我不认为这里有什么问题。 如果你给一个类对象赋值,你就会先验地认为复制操作符会被调用。你想要,你就能得到。如果有一个指针或一个对象,有什么区别呢? 类的类型是一样的。 你不能分配任何左手的类。这就是为什么这一切看起来更像一个闲置的孔。

相反的情况,指针在左边,则是另一回事。 在那里,你可以期望给指针分配一些东西,但结果却是在复制一个对象。

 
Alexey Navoykov:

相反,指针在左边 的情况则不同,在那里你可能期望给指针分配一些东西,但结果是你在复制一个对象。

而且你不能禁止这一点,否则当你真正需要的时候,你将无法复制该对象。

因此,你必须让一切保持原状。只要意识到你在做什么。

 
fxsaber:

而且你不能禁止它,否则当你真正需要的时候,你将无法复制该对象。

最后,你必须让它保持现状。 只是要注意你在做什么。

О!这是最主要的事情。

这里有很多人知道如何驾驭内存管理的模式吗?了解AUTOMATIC和DYNAMIC的区别。

并听说过关于STATIC和BASED的事情(虽然这不是必须的)。

 
fxsaber:

而且你不能禁止它,否则当你真正需要的时候,你将无法复制该对象。

最后,你必须让它保持现状。只要意识到你在做什么。

为什么不能工作? 有*& 运算符可以转换为你需要的东西。
 
Alexey Navoykov:
为什么不能用呢? 有*& 运算符可以将其减少到所需的程度。

哪里有*