[C++-sig] make_constructor issues
Ralf W. Grosse-Kunstleve
rwgk at yahoo.com
Fri Jul 23 21:38:26 CEST 2004
--- Stefan Seefeld <sseefeld at art.ca> wrote:
> hi there,
>
> the wrapper 'python.hpp' header doesn't include
> the 'make_constructor.hpp' file. Shouldn't it ?
>
> Then I try to make
>
> Foo make_foo()
> {
> Foo foo;
> foo.init();
> return foo;
> }
>
> a constructor (i.e. binding it to '__init__' via
> 'make_constructor'), but I get an error message about
> 'element_type' not being a member of Foo. The
> examples I'v found all use pointes, so I changed
> the 'make_foo' function to return a pointer.
> That works, but is not what I want to do.
Why not? It is just a technical detail that you have to adjust to. I.e. you
could to this (untested):
shared_ptr<Foo> make_foo()
{
Foo foo;
foo.init();
return shared_ptr<Foo>(new Foo(foo));
}
But this requires that Foo is copy-constructable and you incur a
runtime-penalty for executing the copy constructor. I'd generally prefer this:
shared_ptr<Foo> make_foo()
{
shared_ptr<Foo> foo_ptr(new Foo);
Foo& foo = *foo_ptr;
foo.init();
return foo_ptr;
}
Is this approach impractical in your environment? If so, what are the reasons?
Ralf
__________________________________
Do you Yahoo!?
New and Improved Yahoo! Mail - Send 10MB messages!
http://promotions.yahoo.com/new_mail
More information about the Cplusplus-sig
mailing list