Страница 1 из 1

Вопрос по сборщику мусора в скриптах

СообщениеДобавлено: 10 май 2011, 21:22
lol
У меня есть MONO-скрипт на объекте GameObject, в котором на Start() выделается память под объект класса(обычный класс C#), типа: MyObject = new MyObject();
Когда я вызываю Object.Destroy(GameObject); то деструктор класса MyObject НЕ вызывается. Он вызовется только, когда я выйду из сцены.
Это так и задумано? Просто какой смысл хранить выделенную мной память, когда объект уже не существует. Или мне надо самому в таких случаях принудительно вызывать деструктор моего класса?

Re: Вопрос по сборщику мусора в скриптах

СообщениеДобавлено: 10 май 2011, 21:27
Neodrop
Деструкторы в Unity для классов-наследников MonoBehaviour не нужны.
Если вы хотите что-то сделать при удалении объекта, используйте OnDestroy()

И стоит поучить уроки, чтобы не задавать подобных вопросов более.


Re: Вопрос по сборщику мусора в скриптах

СообщениеДобавлено: 11 май 2011, 09:09
lol
MyObject - это не класс наследник. Это МОЙ класс обычный C# НЕ унаследованный от MONO.
Выглядит так:
Синтаксис:
Используется csharp
public class MonoEntity : MonoBehaviour
{
        private MyObject m_pObject = null;

        void Start()
        {
                m_pObject = new MyObject();
        }
}
 


Мой класс:
Синтаксис:
Используется csharp
public class MyObject
{
        public MyObject()
        {
        }
       
        ~MyObject()
        {
        }
}
 


Так вот Destroy вызывается для объекта с этим скриптом. Но деструктор моего класса MyObject при этом не вызывается(проверял).

Re: Вопрос по сборщику мусора в скриптах

СообщениеДобавлено: 11 май 2011, 09:48
Neodrop
Всё, что работает в [unity 3D] Unity, это MONO. До последнего пользовательского класса. Если уж здорово хочется, то можно использовать интерфейс IDisposable. Но собирать мусор самостоятельно настоятельно не рекомендуется. [unity 3D] Unity это сделает в нужное время и в нужном месте.

Re: Вопрос по сборщику мусора в скриптах

СообщениеДобавлено: 11 май 2011, 10:06
seaman
По идее сборщик мусора должен был вызвать финализатор, если никто больше на объект не ссылается.

Ну в крайнем случае может быть вызвать:
Синтаксис:
Используется csharp
GC.Collect();