osg::ref_ptr<osg::Node> s3 = new osg::Node; 为什么是对的?
template<class T>
class ref_ptr
{
public:
typedef T element_type;
ref_ptr() : _ptr(0) {}
ref_ptr(T* ptr) : _ptr(ptr) { if (_ptr) _ptr->ref(); }
private:
T* _ptr;
}
class A
{
public:
A()
{
a = 0;
}
A(int *s)
{
a = s;
}
int *a;
};
A t1;
A t2 = new int(2);
A t3 = A(new int(2));
//若类A改成如下所示,则上面 t2 不成立
class A
{
public:
A()
{
a = 0;
}
explicit A(int *s)
{
a = s;
}
int *a;
};
osg::ref_ptr<osg::Node> s1;
osg::ref_ptr<osg::Node> s2(new osg::Node);
osg::ref_ptr<osg::Node> s3 = new osg::Node;
osg::ref_ptr<osg::Node> s4 = osg::ref_ptr<osg::Node>(new osg::Node);