控制拷贝和资源管理、类指针例子

简介: 控制拷贝和资源管理、类指针例子

13.2控制拷贝和资源管理

1.如果类的每个对象相互独立,不共享除静态成员以外的元素,那么称之为类值的;如果如果类的每个对象不是相互独立,共享了除静态成员以外的元素,那么称之为类指针的。

2.大多数赋值运算符组合了析构函数函数拷贝构造函数的工作,赋值运算符还必须考虑自赋值的正确性。

3.类指针的类最好是用shared_ptr来管理类中的资源,否则需要自行定义一个引用计数,将计数器保存在动态内存中

下面是一个类指针的程序例子:

#include <iostream>
#include <string>
using namespace std;
class hasptr {
    friend void swap(hasptr&, hasptr&);
public:
    hasptr(const string &s = string()) :
        ps(new string(s)), i(0), use(new size_t(1)) { }
    hasptr(const hasptr &p) :
        ps(p.ps), i(p.i), use(p.use)
    {
        ++*use;
    }
    hasptr& operator = (const hasptr&);
    hasptr& operator = (const string &);
    string& operator*();
    ~hasptr();
private:
    string *ps;
    int i;
    size_t *use;
};
hasptr::~hasptr()
{
    if (--*use == 0)        //每销毁一个对象,就将其use指针指向的内存内容减一
    {
        delete ps;
        delete use;
    }
}
hasptr& hasptr::operator = (const hasptr &rhs)
{
    ++*rhs.use;
    if (--*use == 0)
    {
        delete ps;
        delete use;
    }
    ps = rhs.ps;
    i = rhs.i;
    use = rhs.use;
    return *this;
}
hasptr& hasptr::operator = (const string & rhs)
{
    *ps = rhs;
    return *this;
}
string & hasptr::operator *()
{
    return *ps;
}
inline void swap(hasptr& lhs, hasptr& rhs)
{
    using std::swap;
    swap(lhs.ps, rhs.ps);
    swap(lhs.i, rhs.i);
}
int main(int argc, char*argv[])
{
    hasptr h("hi mom");
    hasptr h2 = h;
    h = "hi dad";
    cout << "h: " << *h << endl;
    cout << "h2: " << *h2 << endl;
    return 0;
}    
相关文章
|
14天前
|
存储 编译器 Linux
【c++】类和对象(上)(类的定义格式、访问限定符、类域、类的实例化、对象的内存大小、this指针)
本文介绍了C++中的类和对象,包括类的概念、定义格式、访问限定符、类域、对象的创建及内存大小、以及this指针。通过示例代码详细解释了类的定义、成员函数和成员变量的作用,以及如何使用访问限定符控制成员的访问权限。此外,还讨论了对象的内存分配规则和this指针的使用场景,帮助读者深入理解面向对象编程的核心概念。
40 4
|
1月前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
30 2
|
3月前
|
编译器 C++
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
virtual类的使用方法问题之在C++中获取对象的vptr(虚拟表指针)如何解决
|
5月前
|
Java
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
2022蓝桥杯大赛软件类国赛Java大学B组 左移右移 空间换时间+双指针
44 3
|
5月前
|
存储 Java C#
C++语言模板类对原生指针的封装与模拟
C++|智能指针的智能性和指针性:模板类对原生指针的封装与模拟
|
5月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
|
5月前
类与对象\this指针
类与对象\this指针
33 0
|
5月前
|
存储 安全 编译器
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
C++进阶之路:探索访问限定符、封装与this指针的奥秘(类与对象_上篇)
46 0
|
6月前
|
存储 编译器 程序员
从C语言到C++④(第二章_类和对象_上篇)->类->封装->this指针(下)
从C语言到C++④(第二章_类和对象_上篇)->类->封装->this指针
25 0
|
6月前
|
存储 编译器 C语言
从C语言到C++④(第二章_类和对象_上篇)->类->封装->this指针(中)
从C语言到C++④(第二章_类和对象_上篇)->类->封装->this指针
31 0
下一篇
无影云桌面