Sign in to follow this  
sprite_hound

boost::shared_ptrBase to boost::shared_ptrDerived

Recommended Posts

sprite_hound    461
Is something like this possible? (I'm leaning towards not, but I just thought I'd make sure...) The code:
class Base {
};
class Derived : public Base {
};

int main(int argc, char* argv[]) {
	boost::shared_ptr<Base> b(new Derived);
	
	boost::shared_ptr<Derived> d(b); // line 25
}


With compiler errors for it:
C:\code_utils\boost-1_34_1\boost\shared_ptr.hpp||In constructor `boost::shared_ptr<T>::shared_ptr(const boost::shared_ptr<Y>&) [with Y = Base, T = Derived]':|
C:\Documents and Settings\Matthew\My Documents\My C++ Projects\testing\toroidalarray\toroidalarray.cpp|25|instantiated from here|
C:\code_utils\boost-1_34_1\boost\shared_ptr.hpp|195|error: invalid conversion from `Base* const' to `Derived*'|
||=== Build finished: 1 errors, 0 warnings ===|


Share this post


Link to post
Share on other sites
dalleboy    324
Why not the other way around?

class Base {
};
class Derived : public Base {
};

int main(int argc, char* argv[]) {
boost::shared_ptr<Derived> d(new Derived);

boost::shared_ptr<Base> b(d);
}



Works like a charm...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this