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

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

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

Сообщение lol 10 май 2011, 21:22

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

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

Сообщение Neodrop 10 май 2011, 21:27

Деструкторы в Unity для классов-наследников MonoBehaviour не нужны.
Если вы хотите что-то сделать при удалении объекта, используйте OnDestroy()

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

Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение lol 11 май 2011, 09:09

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 при этом не вызывается(проверял).
lol
Старожил
 
Сообщения: 508
Зарегистрирован: 15 ноя 2009, 10:48
Откуда: Москва

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

Сообщение Neodrop 11 май 2011, 09:48

Всё, что работает в [unity 3D] Unity, это MONO. До последнего пользовательского класса. Если уж здорово хочется, то можно использовать интерфейс IDisposable. Но собирать мусор самостоятельно настоятельно не рекомендуется. [unity 3D] Unity это сделает в нужное время и в нужном месте.
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

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

Сообщение seaman 11 май 2011, 10:06

По идее сборщик мусора должен был вызвать финализатор, если никто больше на объект не ссылается.

Ну в крайнем случае может быть вызвать:
Синтаксис:
Используется csharp
GC.Collect();
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 25