`
saybody
  • 浏览: 907910 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

CString的一个问题

MFC 
阅读更多

CString的一个问题

CString的Release函数实现如下:

void CString::Release()
{
        if (GetData() != _afxDataNil)
        {
                ASSERT(GetData()->nRefs != 0);
                if (InterlockedDecrement(&GetData()->nRefs) <= 0)
                        FreeData(GetData());
                Init();
        }
}
其中_afxDataNil定义如下:
  AFX_STATIC_DATA int _afxInitData[] = { -1, 0, 0, 0 };
AFX_STATIC_DATA CStringData* _afxDataNil = (CStringData*)&_afxInitData;

sizeof(CString)等于4,它是一个指针。对于空的CString,MFC会让其指向一个静态数据_afxInitData。MFC通过判断CString的值是否等于_afxInitData的地址来判断CSting是否是空的。

如果在exe和dll之间传递CString对象,而exe和dll都与MFC静态链接,那么在exe和dll中的_afxInitData的地址可能是不同的。exe中的空CString传到dll中会被当成非空CString处理,然后就会发生错误。

一般而言,如果不是动态链接MFC类库,应尽量避免在exe和dll之间传递MFC的对象。

分享到:
评论

相关推荐

    CString

    CString 类还使用了写入复制技术(CopyBeforeWrite),当使用一个 CString 对象 a 来初始化另一个 CString 对象 b 时,新对象 b 并不分配空间,它所要做的只是将自己的指针指向对象 a 的那块内存空间,只有当需要...

    判断一个CString对象是否全是数字

    本文将深入探讨如何判断一个`CString`对象是否全由数字组成,这在很多应用场景中都是一个非常实用且基础的功能。 ### 核心知识点:判断`CString`对象是否为数字 #### 1. `CString`类简介 `CString`是MFC...

    CString工作原理和常见问题分析

    当一个`CString`对象被另一个对象复制时,两个对象共享同一块内存。只有当其中一个对象试图修改字符串时,系统才会为这个对象分配新的内存并复制原有内容,从而实现真正的“复制”。 具体来说,`CString`中包含一个...

    CString详细操作指南

    CString 类型的一个重要特点就是字符串的连接,可以很方便地连接两个字符串。例如: ``` CString gray("Gray"); CString cat("Cat"); CString graycat = gray + cat; ``` 这个方法比使用 `char` 数组和 `strcpy` ...

    用C++语言实现一个详尽的CString类

    - **功能**: 实现了`+=`运算符重载,用于将一个`CString`对象追加到另一个`CString`对象的末尾。 - **参数**: `CString &m`为待追加的`CString`对象。 6. **左截取方法**: ```cpp char *CString::Left(int len)...

    CString详解,介绍CString类

    `CString`是Microsoft Foundation Classes (MFC)框架中的一个核心类,用于处理字符串数据。它提供了一系列强大的功能来简化字符串操作,包括字符串连接、转换、格式化等。`CString`的引入极大地提高了开发效率,特别...

    CString和string对象

    CString是MFC中的一个类,它是用来处理字符串的。string是标准C++中的一个类,用于处理字符串。由于CString是MFC中的类,所以它不能直接与标准C++中的string类进行操作。因此,我们经常需要将CString类型转化为...

    CString转UTF8,UTF8转CString

    1. **CString**:是MFC中的一个类,用于封装C风格的字符串(即以null结尾的字符数组)。它提供了一系列方便的方法来操作字符串。 2. **UTF-8**:是一种可变长度的字符编码方式,用于表示Unicode标准中的字符。它可以...

    mfc关于CString的所有操作

    在Microsoft Foundation Classes (MFC)库中,`CString`是一个非常重要的类,它提供了一种方便的方式来处理和操作字符串。`CString`类是基于C++的,它在内存管理、字符串连接、格式化等方面提供了很多便利的方法。...

    CString_LINUX上模拟CString的类_

    1. **基础结构**:首先,创建一个名为`CString`的类,包含一个内部的`std::string`成员变量来存储字符串数据。 ```cpp class CString { private: std::string m_str; public: // 构造函数、拷贝构造函数、赋值...

    非MFC工程使用CString

    为了简化这一过程并提高效率,Microsoft Visual Studio 提供了 CString 类,这是一个非常强大且方便使用的字符串处理类。然而,在非 MFC (Microsoft Foundation Classes) 工程中直接使用 CString 时,可能会遇到编译...

    C/C++的CString成员函数用法大全

    `:复制构造函数,创建一个新字符串对象,内容同 `stringSrc`。 * `CString(TCHAR ch, int nRepeat = 1);`:创建一个字符串对象,内容是 `ch` 字符重复 `nRepeat` 次。 * `CString(LPCTSTR lpch, int nLength);`:...

    CString源码.txt

    `CString`是Microsoft在MFC(Microsoft Foundation Classes)框架中定义的一个字符串类,用于处理Unicode与非Unicode数据。 ### 标题:CString源码 ### 描述:CString源码,观察类实现源码 ### 关键知识点 #### ...

    MFC字符串CString 操作用法详解

    其中,`CString`是MFC中用于处理字符串的一个重要类。本文将详细介绍`CString`的各种构造方法以及常用的操作函数,并通过实例来帮助读者更好地理解和使用这些函数。 #### 二、CString构造函数详解 `CString`提供了...

    比CString更高效的字符串替换

    为了解决这个问题,我们可以创建一个自定义的字符串类,比如`HString`,它采用不同的策略来提高替换操作的效率。从提供的文件名`HString.cpp`和`HString.h`来看,这个类很可能实现了更高效的方法来执行字符串替换。...

    CString操作大全指南

    【标题】:全面掌握CString操作 ...本文涵盖了大部分在MFC环境中使用CString的基本操作,帮助开发者更好地理解和利用这一强大的字符串类。通过学习这些技巧,可以提高代码的可读性和维护性,并降低潜在的内存管理错误。

    CString内存泄露HTML.rar

    MFC(Microsoft Foundation Classes)是微软提供的一个C++类库,用于简化Windows应用程序开发,其中CString是一个方便的字符串处理类。内存泄露是指程序在申请内存后,无法释放已申请的内存空间,久而久之,系统可用...

    CString类源代码,共享

    在C++编程中,`CString`是一个非常重要的字符串类,尤其在Microsoft的MFC(Microsoft Foundation Classes)库中被广泛使用。它提供了丰富的字符串操作功能,使得开发者可以方便地进行字符串处理。`CString`类的设计...

    Cstring 与BYTE类型之间转换

    `CString`是Microsoft MFC(Microsoft Foundation Classes)中的一个类,用于处理字符串。相比于C++标准库中的`std::string`,`CString`提供了更多的功能和更简便的操作接口。它支持各种字符串操作,如拼接、分割、...

Global site tag (gtag.js) - Google Analytics