动态创建对象到底声明成指针还是普通对象...???弄不清

bigbbb 2005-10-13 04:30:31
我动态创建按钮时
声明到全局变量

可以成功创建按钮并显示
public
cbutton b;

void cdialog::onini()
{
b.create(参数省略)
}
可是我声明成局部变量就不行

void cdialog::onini()
{
cbutton b;
b.create(参数省略)
}

我也知道声明成指针对象肯定行
cbutton * b;
b = new cbutton ;
b->create(参数略);

这是为什么啊!!!!!!!!!!!!!!!!!!!!!! 大虾指点


还有为什么有的对象声明成局部普通对象也可以成功创建啊!!!!! 搞不懂
cpen p;
p.create(参数略)

CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());

.....

为什么像 cpen, cdc 等等子类的很多对象只要声明到某个过程都可以成功创建阿!!!!!
弄不清!!!!
...全文
98 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
smatter 2005-10-19
  • 打赏
  • 举报
回复
局部和全局的问题!
jx_lgq 2005-10-19
  • 打赏
  • 举报
回复
你的CButton要出了函数范围还用啊,而CPen 等也只在函数范围内起作用。
另外,Create函数对于控件来说一般用于为C++对象创建其窗口对象(两个对象是不一样的概念),并不表示是动态创建的意思。
动态创建是指类的定义中实现了class#MyClass的CRuntimeClass对象,实际操作中也就是是否使用了
DECLARE_DYNACREATE / IMPLEMENT_DYNACREATE(...) 宏。使用时通过宏RUNTIME_CLASS(MYclass)来创建MYClass 对象的,所以,动态创建开始肯定是声名一个指针,通过 RUNTIEME_CLASS(MyClass)->Create(...)函数给其实际值。才是所谓动态创建。
DoItFreely 2005-10-19
  • 打赏
  • 举报
回复
CButton从CWnd派生来,在析构的时候调用DestroyWindow(),由于运行时很快,窗口还没来得及显示就被销毁了,看起来好象根本没创建

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧