<div dir="ltr"><div><br></div>the osg::ref_ptr<> could be wrapped into a smart pointer, right? But what's the point ;)<br></div><div class="gmail_extra"><br><div class="gmail_quote">2016-04-07 10:33 GMT+02:00 Sebastian Messerschmidt <span dir="ltr"><<a href="mailto:sebastian.messerschmidt@gmx.de" target="_blank">sebastian.messerschmidt@gmx.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Vincent,<span class=""><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello<br>
<br>
I'm trying to use osg:Vec3Array with a c++11 smart pointer instead of osg smart pointer. I aim to join two APIs: osg and another one using C++11 smart pointer. Apparently, this is a destructor problem: ~TemplateArray<>() is private, so an explicit delete doesn't work. I have test many cases to understand the problem.<br>
<br>
<br>
Code:<br>
osg::Vec3Array * test = new osg::Vec3Array();<br>
delete test; // error here<br>
<br>
<br>
<br>
<br>
Code:<br>
std::shared_ptr<osg::Vec3Array> test2(new osg::Vec3Array()); // error due to pointer releasing<br>
<br>
<br>
<br>
<br>
Code:<br>
osg::Vec3Array test; // not work<br>
<br>
<br>
<br>
<br>
Code:<br>
osg::ref_ptr<osg::Vec3Array> test3 = new osg::Vec3Array(); // this work fine.<br>
<br>
<br>
<br>
So there are few solutions to use the Vec3Array: use osg smart pointer. What is the reason the destructor is protected even through the method is empty? Maybe to force developers to use smart pointers but I'm constrained to use c++11 smart pointer due to the second api. I think the only way, is to create a C++11 smart pointer templated by osg smart pointer or a class which contains the osg smart pointer.<br>
</blockquote></span>
First of all, the osg will manage the array fine when you keep it in a drawable, so there should no need to use your own management. If you need to hold it outside, simply use the ref_ptr. the ref_ptr is basically an smart-pointer for osg::Object derived objects.<br>
The reason the destructor is private is to prevent stack-instances of the type and to disallow use patterns like yours.<br>
If i remember correctly there was some guide on this in the wiki/trac.<span class=""><br>
<br>
<br>
Do you have an idea to use C+11 smart pointer instead of osg one?<br>
<br></span>
Simply don't. It would not solve a single problem and would create pitfalls.<br>
Use the osg::ref_ptr if you need to keep an object (it acts as a "shared ptr"). If you need a week smart ptr you can use observer pointer.<br>
<br>
<br>
Cheers<span class="HOEnZb"><font color="#888888"><br>
Sebastian</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Thank you!<br>
<br>
Cheers,<br>
Vincent<br>
<br>
------------------<br>
Read this topic online here:<br>
<a href="http://forum.openscenegraph.org/viewtopic.php?p=66760#66760" rel="noreferrer" target="_blank">http://forum.openscenegraph.org/viewtopic.php?p=66760#66760</a><br>
<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</blockquote>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org" target="_blank">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</div></div></blockquote></div><br></div>