首页 > 系统相关 >C++友元和动态内存

C++友元和动态内存

时间:2024-05-24 17:17:55浏览次数:20  
标签:友元 int C++ 动态内存 MyClass data

在C++中,友元机制允许一个类将其非公有成员的访问权限授予指定的函数或者类。然而,滥用友元会破坏封装性,导致可维护性和安全性问题。

动态内存指的是在程序运行时分配和释放内存,通常通过使用new和delete操作符在C++中管理。

下面是一个简单的例子,展示了如何在类中使用友元函数来访问私有数据成员,并使用动态内存分配来管理对象。

include

class MyClass {
int* data;
friend void printData(MyClass* obj); // 声明友元函数

public:
MyClass(int value) {
data = new int(value); // 使用new分配动态内存
}

~MyClass() {
    delete data; // 对象销毁时释放内存
}

};

void printData(MyClass* obj) {
std::cout << *(obj->data) << std::endl; // 使用友元函数访问私有数据成员
}

int main() {
MyClass myObj(10);
printData(&myObj); // 输出: 10
return 0;
}

在这个例子中,printData函数是MyClass的友元,可以访问MyClass对象的私有数据成员data。同时,MyClass的构造函数使用new操作符为data分配了动态内存,析构函数则使用delete操作符在对象销毁时释放内存,避免了内存泄露。

标签:友元,int,C++,动态内存,MyClass,data
From: https://www.cnblogs.com/xujiangsu/p/18211359

相关文章

  • C++/Qt桌面应用学习路线参考
    ......
  • c++对象存放区域
    在C++中,对象的存放位置通常取决于对象的生存周期和分配方式。C++中的对象可以存放在以下几个主要的内存区域:栈(Stack):自动变量和局部对象通常存储在栈上。栈是一种后进先出(LIFO)的数据结构,它由编译器自动管理,当函数调用结束时,栈上的局部对象会自动被销毁。堆(Heap):动态分配......
  • C++-函数
    函数(Function):是一个提前封装好的、可重复使用的、完成特定功能的独立代码单元。特点:提前封装、可重复使用的、完成特定功能将针对特定功能的、有重复使用需求的代码,提前封装到函数内,在需要的时候随时调用。基础函数语法return语句执行后,函数立刻结束函数不可定义在mai......
  • Educator:C++面向对象-STL实训
    第1关:病毒复制任务描述本关任务:设计一个病毒类。相关知识本关涉及到的内容如下:拷贝构造函数重载!=和==运算符拷贝构造函数当一个构造函数的唯一一个参数就是它所在类的引用时,这个构造函数就是一个拷贝构造函数编程要求设计一个病毒Virus类,它的内部有一个Gen变量,代表......
  • 浅谈C++函数
    目录一、函数的概念二、调用函数的两个前提三、函数传参的三种形式四、函数返回类型一、函数的概念函数是C++程序的基本模块,通常一个C++程序由一个或多个函数组成。函数可以完成用户指定的任务,一般分为库函数和用户自定义的函数。函数由函数头和函数体组成,函数头中包......
  • C语言:动态内存管理的学习1
    动态内存管理本章重点为什么存在动态内存分配?动态内存函数的介绍mallocfreecallocrealloc常见的动态内存错误·几个经典的笔试题·柔性数组一.为什么存在动态内存分配?我们已经学到的开辟空间的方法:inta;intarr[100];单个开辟空间或者连续开辟空间;在数组的......
  • 【C++】两个类的相互引用_c++ 类相互引用
    有时候在设计数据结构的时候,可能会遇到两个类需要相互引用的情形。比如类A有类型为B的成员,而类B又有类型为A的成员。那么这种情形下,两个类的设计上需要注意什么呢?同一文件尝试方案将A和B的定义都放在一个文件中,例如:#include<iostream>classA{public:......
  • C++Linux系统编程——文件和目录操作函数
    stat函数(重要)#include<sys/types.h>#include<sys/stat.h>#include<unistd.h>​intstat(constchar*path,structstat*buf);intlstat(constchar*pathname,structstat*buf);功能: 获取文件状态信息 stat和lstat的区别:   当文件是一个符号......
  • 【C++初阶】—— 类和对象 (上)
    ......
  • C++基础知识学习笔记(2)
    资料来源https://www.bilibili.com/video/BV1et411b73Z/?spm_id_from=333.337.search-card.all.click&vd_source=cc561849591f6a210152150b2493f6f3简单知识点指针作用:通过指针间接访问内存可以通过指针来保存一个地址。指针所占内存空间32位操作系统,占4个字节。64位操......