PDA

View Full Version : Why use * ?



probine
24th February 2006, 16:20
What are the benefits of uwing * ? Example:

QTextBox * myTextBox = new QTextBox("hello");

in stead of:

QtextBox myTextBox("hello");

Which one is better, why ?

brcain
24th February 2006, 16:42
These might help ...

http://public.research.att.com/~bs/bs_faq2.html
http://groups.google.com/group/comp.lang.c++?lnk=srg&hl=en
http://groups.google.com/group/comp.lang.c++.moderated?lnk=srg&hl=en

brcain
24th February 2006, 16:53
You might use RAII ... since it safely releases resources. Not sure what you were asking. From what I've read Qt helps out greatly.

probine
24th February 2006, 16:57
Well... the question is for curiosity.

I would like to know when and why I should use the "*" to create a new instance of a class in stead of instantiating without it.

class test
{
.
.
}

int main()
{
test * myTest = new test();
// or perhaps I should just use:
test myTest();
}

brcain
24th February 2006, 17:30
I would default to non-pointer types unless design dictates it ... employing RAII for safety in releasing resources. If you need pointer types, I'd recommend using smart pointers (i.e. reference counting pointers). But, the question is so general I'm not sure I'm answering correctly. :)

Here's what I've traditionally used for smart pointers. It's from the Boost library. I'll never understand why a smart pointer wasn't included in the C++ Standard. Qt may provide a smart pointer ... don't know yet.
http://www.boost.org/libs/smart_ptr/shared_ptr.htm

brcain
24th February 2006, 18:05
The Qt Tutorial address memory management issues ... concerning Qt widgets.

From the Qt Tutorial -- Chapter 4

"Note that quit is a local variable in the constructor. MyWidget does not keep track of it; Qt does, and will automatically delete it when the MyWidget object is deleted. This is why MyWidget doesn't need a destructor. (On the other hand, there is no harm in deleting a child when you choose to. The child will automatically tell Qt about its imminent death.)"



MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
...
QPushButton *quit = new QPushButton(tr("Quit"), this);
quit->setGeometry(62, 40, 75, 30);
quit->setFont(QFont("Times", 18, QFont::Bold));
...
}

dublet
3rd March 2006, 10:16
Simple, use pointers when you need the object to stay in memory. Regular objects are created on the stack, and thus destroyed quite quickly.