Re: auto_ptr who is right?
peter koch wrote:
On 2 Sep., 15:19, Barry <dhb2...@gmail.com> wrote:
struct A
{
void Print() const {
cout << "Print" << endl;
}
};
auto_ptr<A> Get()
{
new A; // (1)
// auto_ptr<A>(new A); // (2) works fine
Don't you respect your compilers warnings? This should not compile
without a warning, and you do not return anything - whats returned is
rubbish.
sorry, I didn't compile this code, I just make a mimic example
after I post this thread, I compile this code (add return), and found it
work also on MSVC8
}
int main()
{
auto_ptr<A> p = Get();
p->Print();
Here you dereference garbage. Garbage in means garbase out.
/Peter
[snip]
Well, this one really crashes!
#include <memory>
#include <iostream>
#include <string>
using namespace std;
struct Pizza
{
Pizza(string const& name) : name_(name) {}
void Show() const
{
cout << name_ << " Pizza" << endl;
}
private:
string name_;
};
struct Pie
{
Pie(string const& name) : name_(name) {}
void Show() const
{
cout << name_ << " Pie" << endl;
}
private:
string name_;
};
class AbstractFactory
{
public:
virtual auto_ptr<Pizza> CreatePizza() = 0;
virtual ~AbstractFactory() {}
};
class NestFactory
: public AbstractFactory
{
virtual auto_ptr<Pizza> CreatePizza()
{
return new Pizza("Nest");
}
};
int main()
{
auto_ptr<AbstractFactory> pFactory(new NestFactory);
auto_ptr<Pizza> pPizza = pFactory->CreatePizza();
pPizza->Show();
}
--
Thanks
Barry