• 5448阅读
  • 5回复

求解对象和指针对象的问题。(内有简单代码说明) [复制链接]

上一主题 下一主题
离线6069205
 

只看楼主 倒序阅读 楼主  发表于: 2013-12-01

    firstdialog *dialog;
    dialog->show();
firstdialog是我自定义的一个窗口类,为什么这样表示的话,运行时,不会出现窗口


而我像下面这样:

    firstdialog  dialog;
    dialog.show();
就可以显示出窗口。


请问上面两种有很大的区别吗?我一直以为这两种都是一样的。

QT chu xue zhe...
离线XChinux

只看该作者 1楼 发表于: 2013-12-01
楼主得补充下C++基础。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线6069205

只看该作者 2楼 发表于: 2013-12-01
回 1楼(XChinux) 的帖子
哈哈。。好的。。知道了 谢谢
QT chu xue zhe...
离线realfan

只看该作者 3楼 发表于: 2013-12-02
回 楼主(6069205) 的帖子
firstdialog *dialog = new firstdialog();
dialog->show();
离线XChinux

只看该作者 4楼 发表于: 2014-01-26
通常的show(),执行完该函数后继续后面的过程,如果此时你使用栈上创建对象的方式,那作用域一结束,对象不存在了,show()也就一闪而过。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线noidea

只看该作者 5楼 发表于: 2014-01-27
firstdialog *dialog;  // 这里你只是对firstdialog定义当时没有进行初始化。也就是没有分配内存给他,他是一个空指针。
dialog->show();  // 你对空指针进行show操作,是没有任何作用的。

如果你想使用指针,那么你就要显式分配内存。
firstdialog * dialog = new firstdialog;
这个表面你在堆(heap)上给firstdialog分配了实际可用的内存。

此时你在show,是可以的。

应当注意的是,如果你显示调用new来分配内存,你需要delete这个内存当你不再使用。

------
firstdialog  dialog;
dialog.show();

这种方法是当你定义的时候程序在栈(stack)上自动给你分配内存,所以你调用show是可以立即执行的。

这样的方法是不需要管内存回收的问题。

应当注意的是,之所以有两种方式是因为堆(heap)是由程序员自由控制,而且这部分内存大小可以自由使用,而栈(stack)资源是有限的,当你需要分配很大的内存给变量时,你最好不要使用栈。

栈在生存期外就会自动释放。
比如
{
firstdialog  dialog;
dialog.show();
}  // 这里释放掉dialog
talk in code
Qt5.2.1 + MacOSX10.9
快速回复
限100 字节
 
上一个 下一个