Здравствуйте, night beast, Вы писали:
NB>>>скажи мне, кэп, откуда они узнают что ты у себя где-то обнулил этот указатель? S>>Проверить на nullptr например?
NB>давай ты попробуешь изобразить это в коде?
Здравствуйте, Sheridan, Вы писали:
NB>>>>скажи мне, кэп, откуда они узнают что ты у себя где-то обнулил этот указатель? S>>>Проверить на nullptr например?
NB>>давай ты попробуешь изобразить это в коде? S>
Здравствуйте, Sheridan, Вы писали:
S>В функцию что передаётся? raw ptr. Какой вывод? Управлять памятью этого объекта самостоятельно. Или нет? Какой уровень телепатии должен быть чтобы догадаться что там нужен "умный" указатель?
У них в документации есть интересная заметка.
Raw pointers are used whenever possible in the classes' public API. This simplifies exposing functions & classes to script, and is relatively safe, because SharedPtr & WeakPtr use intrusive reference counting.
Из этого прямо не следует, что для управления памятью, выделенной под указатели везде умные указатели используются, но это повод подробнее посмотреть документацию и примеры.
Здравствуйте, night beast, Вы писали:
NB>то есть в документации показано, как правильно использовать их либу, но ты решил что знаешь лучше, как надо, и теперь жалуешься что что-то не работает?
Это плохой подход к разработке библиотеки. Если специально не оговорено, что при каких-то условиях не будет работать, то должно работать. Если же работает только по определённым сценариям, то значит авторы слишком много о себе думают.
Здравствуйте, night beast, Вы писали:
S>>В функцию что передаётся? raw ptr. Какой вывод? Управлять памятью этого объекта самостоятельно. Или нет? Какой уровень телепатии должен быть чтобы догадаться что там нужен "умный" указатель? NB>в функцию передается raw ptr, скорее всего, чтобы избежать лишних инкрементов/декрементов на ровном месте.
Хотите избежать лишних инкрементов/декрементов на ровном месте? Передавайте ссылку!
Это явная ошибка дизайна:
class Geometry
{
...
Vector<SharedPtr<VertexBuffer> > vertexBuffers_;
...
};
bool Geometry::SetVertexBuffer(unsigned index, VertexBuffer* buffer)
{
if (index >= vertexBuffers_.Size())
{
URHO3D_LOGERROR("Stream index out of bounds");
return false;
}
vertexBuffers_[index] = buffer;
return true;
}
Должно быть:
bool Geometry::SetVertexBuffer(unsigned index, const SharedPtr<VertexBuffer>& buffer)
{
if (index >= vertexBuffers_.Size())
{
URHO3D_LOGERROR("Stream index out of bounds");
return false;
}
vertexBuffers_[index] = buffer;
return true;
}
Здравствуйте, B0FEE664, Вы писали:
S>>>В функцию что передаётся? raw ptr. Какой вывод? Управлять памятью этого объекта самостоятельно. Или нет? Какой уровень телепатии должен быть чтобы догадаться что там нужен "умный" указатель? NB>>в функцию передается raw ptr, скорее всего, чтобы избежать лишних инкрементов/декрементов на ровном месте. BFE> BFE>Хотите избежать лишних инкрементов/декрементов на ровном месте? Передавайте ссылку! BFE>Это явная ошибка дизайна:
Здравствуйте, Sheridan, Вы писали:
L>>Еще никто не добавил, что использование синглтонов в принципе дурной тон и на самом деле есть то самое "я что тут происходит, кому объект может понадобиться и когда он будет удаляццо"? S>Нет. У меня синглтон как раз по делу.
Здравствуйте, night beast, Вы писали:
BFE>>Это явная ошибка дизайна: NB>чуть выше уже написали обоснование этому решению.
Это не обоснование, а рассказ от любителей разбрасывать грабли о том, что где-то в их коде лежат грабли. Авторам ничего не мешает сгенерить отдельный API для своих скриптов (чем бы эти скрипты не были).
Здравствуйте, night beast, Вы писали:
NB>так, да?
Ты в этой ветке уже кажется третий кто ему пытается таким образом объяснить , и у него похоже проблема с пониманием что такое указатель.
Sheridan при delete ptr; и ptr = nullptr; — обнуляется только переменая ptr, никакие другие указатели на туже память не обнуляются, указатель это переменая, она занимает память, а то о чём ты мечтаешь будет указатель на указатель, но мой тебе совет, не иди по этому пути, помню у меня был друг у которого доходило до ****ptr, этож застрелиться.
Здравствуйте, Igore, Вы писали:
I>Sheridan при delete ptr; и ptr = nullptr; — обнуляется только переменая ptr, никакие другие указатели на туже память не обнуляются, указатель это переменая, она занимает память, а то о чём ты мечтаешь будет указатель на указатель, но мой тебе совет, не иди по этому пути, помню у меня был друг у которого доходило до ****ptr, этож застрелиться.
Ой да ладно! Застрелился он...
Smart указатели на то и смарт, что могут всё:
Здравствуйте, B0FEE664, Вы писали:
BFE>Здравствуйте, Igore, Вы писали:
I>>Sheridan при delete ptr; и ptr = nullptr; — обнуляется только переменая ptr, никакие другие указатели на туже память не обнуляются, указатель это переменая, она занимает память, а то о чём ты мечтаешь будет указатель на указатель, но мой тебе совет, не иди по этому пути, помню у меня был друг у которого доходило до ****ptr, этож застрелиться.
BFE>Ой да ладно! Застрелился он... BFE>Smart указатели на то и смарт, что могут всё:
Не не не, ты не понял, голые указатели с четвертым уровнем косвености, никаких умных указателей void**** m_someDataPtr;
Здравствуйте, Sheridan, Вы писали:
R>>1. Что ты будешь с этим исключением делать? Как ты определишь, какой из объектов кинул исключение? Они ведь неразличимы. S>Значит перепишу так, чтобы были различимы, раз уж именно тут надо перехватить и именно в таких условиях.
Это предложение говорит мне о том, что тебе очень мало приходилось работать с чужим кодом. А я видел код, сделанный как раз "чтобы были различимы". Причем на гораздо менее злобной Java.
Ты подумай: а вдруг с этим твоим кодом начнет работать маньяк, который знает твой домашний адрес?
Здравствуйте, AleksandrN, Вы писали:
S>>В функцию что передаётся? raw ptr. Какой вывод? Управлять памятью этого объекта самостоятельно. Или нет? Какой уровень телепатии должен быть чтобы догадаться что там нужен "умный" указатель?
AN>У них в документации есть интересная заметка. AN>
AN>Raw pointers are used whenever possible in the classes' public API. This simplifies exposing functions & classes to script, and is relatively safe, because SharedPtr & WeakPtr use intrusive reference counting.
AN>Из этого прямо не следует, что для управления памятью, выделенной под указатели везде умные указатели используются, но это повод подробнее посмотреть документацию и примеры.
When making your own work functions or threads, observe that the following things are unsafe and will result in undefined behavior and crashes, if done outside the main thread:
Modifying scene or UI content
Modifying GPU resources
Executing script functions Pointing SharedPtr's or WeakPtr's to the same RefCounted object from multiple threads simultaneously
Терзают меня смутные сомнения, что такой mirror_ptr может на что-нибудь полезное сгодиться. И долго хранить в куче ссылку на указатель (да и вообще на что либо) я бы поостерёгся.