注册 登录
编程论坛 C++教室

求助一个关于对象被析够的问题

不会编程 发布于 2007-08-14 09:47, 1027 次点击

如果一个对象与一个资源相关,比如一个位图,那该对象被析够时,资源也被销毁。那对象中的数据变量会不会被销毁?

11 回复
#2
野比2007-08-14 10:12

如果资源是内嵌的(所有信息保存在对象里), 那么yes
如果资源是链接的(对象只保存指向信息), 那么no

#3
不会编程2007-08-14 10:34

那对象中其他的变量,与资源无关的,是不是也会被销毁?

#4
aipb20072007-08-14 10:40

你去找下作用域和变量生命周期的的内容看下,就有很清楚了!

#5
不会编程2007-08-14 10:55
int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: Add your specialized creation code here
CClientDC dc(this);
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
//CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);
//ShowCaret();
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
CreateCaret(&bm);
ShowCaret();
return 0;
}
这是在窗口创建一个插入符,为什么用固定插入符CreateSolidCaret()可以在窗口显示插入符,而用位图却无法显示该位图插入符?
#6
aipb20072007-08-14 10:58
不懂vc
#7
不会编程2007-08-14 11:02

那怎么办?

#8
aipb20072007-08-14 11:03
去vc版问啊!
#9
不会编程2007-08-14 11:04
怕被鄙视。。。。
#10
neverDie2007-08-14 12:10

怕,你就永远学不好了!

#11
野比2007-08-14 13:23
Caret只是一个矩形...设置线高线宽让它看起来是闪烁的光标
想用位图做光标你必须把它画出来, drawbitmap,...而不是仅仅用createcaret...
去VC或图形区问...我寝室没VC, 写不了...
#12
kaishiuexi2007-08-17 23:38

cbitmap bm;

放错地了

你放在这里的话当执行到右大括号时会发生析构,销毁与该过程相关的资源,即把你创建的局部变量也销毁了,所以你看不到你的位图插入符;

1