首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么`CClientDC dc (this);`不能替换为`CClientDC dc = CClientDC(this);`

为什么`CClientDC dc (this);`不能替换为`CClientDC dc = CClientDC(this);`
EN

Stack Overflow用户
提问于 2013-04-08 17:38:31
回答 3查看 1.3K关注 0票数 1

我是MFC编程的新手。这些天,我正在使用Jeff Prosise的书来学习MFC编程。我遇到过:CClientDC dc (this);和我从CClientDC类的定义中找到了一个构造函数:CClientDC(CWnd* pWnd);,但是如果我用CClientDC dc = CClientDC(this);替换CClientDC dc (this);。编译器告诉我这是个错误。我不能理解。我认为CClientDC dc (this);CClientDC dc = CClientDC(this);是一样的。或者换句话说,前者是一种简单的形式。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-08 17:41:41

代码语言:javascript
复制
CClientDC dc = CClientDC(this);

等同于

代码语言:javascript
复制
CClientDC dc(CClientDC(this));

为此,CClientDC必须有一个复制或移动构造函数,因为您基本上是通过从临时对象复制来构造dc的。

如果初始化是...,则为

。复制-初始化,其中源类型的cv非限定版本与...目的地,构造器被考虑在内。..。调用如此选定的构造函数来初始化对象,并将初始化器表达式或表达式列表作为其参数。如果没有应用任何构造函数,或者重载解决方案不明确,则初始化的格式不正确。

票数 7
EN

Stack Overflow用户

发布于 2013-04-08 17:55:04

CObject ( CClientDC和CDC的基类)的复制构造函数和重载赋值运算符被显式标记为私有afx.h

代码语言:javascript
复制
private:
    CObject(const CObject& objectSrc);              // no implementation
    void operator=(const CObject& objectSrc);       // no implementation

这是显式完成的,因为DC对象(和其他基于CObject的类)中的许多成员(比如HDC成员)需要显式处理才能被多次引用。否则,一个实例的析构函数可能会“关闭”底层句柄。从而使另一实例处于不确定(坏)状态。

票数 1
EN

Stack Overflow用户

发布于 2013-04-08 17:57:24

为了成功执行CClientDC dc = CClientDC(this),需要有一个重载的CClientDC构造函数,该构造函数以cwind*为参数并返回CClientDC。但它并不存在。所以编译器给出了错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15875874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档