• 5393阅读
  • 12回复

关于删除成员内容的问题 [复制链接]

上一主题 下一主题
离线iiiyyyhhhsss
 

只看楼主 倒序阅读 楼主  发表于: 2009-09-15
QImage *myImage;

例如上面定义了一幅图像,当没有载入图像时,myImage->isNull()为真,载入图像后,myImage->isNull()为false

我想问,如何在载入了图片后,删除myImage里的图像,使其myImage->isNull()恢复为true,但不是删除myImage这个成员
离线dbzhang800

只看该作者 1楼 发表于: 2009-09-15
楼主应该找本C或者C++的书找到指针部分好好看看。

你这儿的疑问和面对
char * str;      int * array; 等 没有区别
离线iiiyyyhhhsss

只看该作者 2楼 发表于: 2009-09-15
翻过一遍,还是糊涂,感觉我的上面的QImage *myImage和char *str很不同吧

例如,对象myImage创建之后,里面有很多成员,有些成员有初始化,有些没有初始化,

但是str创建之后,我感觉不出str有成员啊,好像自己就是自己的成员,就像int a一样,a没有成员吧?
离线dbzhang800

只看该作者 3楼 发表于: 2009-09-15
QImage *myImage;
这是定义一个指针,下面的也是
int * a;

下面的也没大区别吧
myImage = new QImage(.....);

a = new int(10);

下面呢?(看你首贴,顺便问一句,你确定你理解delete的作用吗?)
delete myImage;

delete a;

下面呢?

myImage = NULL;
a = NULL;
离线iiiyyyhhhsss

只看该作者 4楼 发表于: 2009-09-15
你最后有myImage=NULL;

但是不会有myImage->isNull()=true吧?因为这个对象所占内存已经被释放

我的意思是,能不能delete掉一个类对象里的某个成员?而这个对象仍然保留着。希望我的表达足够清楚吧

我感觉一个对象中有某些类的成员等等,类中有类那些很复杂。例如:

class A
{...};

class B
{...;
A a;};

class C
{...;
B b};

那么,在构建类C的对象c时,可否不初始化里面成员呢?在以后用到的时候再定义里面b的内容,在需要时再删除或更改b内容,而c一直保持有效呢?
[ 此帖被iiiyyyhhhsss在2009-09-15 22:38重新编辑 ]
离线dbzhang800

只看该作者 5楼 发表于: 2009-09-15
看起来你对 指针 及相关 的 new 和 delete 仍然是一头雾水,建议找本 C++ 的书 看看
离线iiiyyyhhhsss

只看该作者 6楼 发表于: 2009-09-15
看来真的要重新认真看看了
离线iiiyyyhhhsss

只看该作者 7楼 发表于: 2009-09-15
你能告诉我QImage里那个成员存储了图像的像素数据吗?
离线dbzhang800

只看该作者 8楼 发表于: 2009-09-15
我不清楚你是要做什么。

在说一次, QImage *myImage;
只是定义了一个指针,在它指向一个 QImage对象之前,你是没办法用它的。

肯定要
myImage = new QImage(...)

myImage = & realImage

这和 isNull没有什么关系,无论isNull 是true还是false,QImage对象该占多大空间就是多大空间。

如果是 new 申请的内存,必须用delete来释放。(你要释放内存的话,必须这么做)

delete myImage;

然后你可以继续让 myImage  指向其他对象
myImage = new QImage()




-------------------------------------
我对C++也是门外汉,以上看法如有不当之处望大家指正
离线iiiyyyhhhsss

只看该作者 9楼 发表于: 2009-09-15
其实我的想法很简单,就是要检测QImage的状态到底是否已经load了图片,如果没有,则load(filename),如果有,则不用。。。

我开始以为isNull()的作用是检测myImage里有没有图片。。。

myImage=new QImage(...)是必须的吗?

我试过
QImage myImage;
myImage.load(FileName);

这两句也能给myImage加载图片啊,编译,运行都通过了啊。。
离线dbzhang800

只看该作者 10楼 发表于: 2009-09-15
你不要偷换概念好不好,还你九楼的帖子之前,你一直讨论的是指针!!

看来你对C、C++ 。。。。。。。。

莫非

int a;
int *a;

你还分不清??
离线iiiyyyhhhsss

只看该作者 11楼 发表于: 2009-09-16
呵呵,sorry,我搞糊涂了,你是对的
离线foxyz

只看该作者 12楼 发表于: 2009-09-16
这个,楼主确实得好好看看C++

你想删除类中的某个成员变量(指针),那就看你是否有访问这个变量的权限阿。
有的话,delete掉就完了。
快速回复
限100 字节
 
上一个 下一个