C++创建对象时什么时候用*,什么时候不用*
用*, 表示创建的是一个指针对象,而指针的创建,必须初始化,C++中用new关键字开辟内存。
另外指针对象访问成员变量用-> , 非指针用. 就这么个原则
但是指针也可以不用-> 例如 (*p).age 所以->其实就是先*后.的简写吧

#ifndef MyArray_hpp
#define MyArray_hpp #include <stdio.h> class MyArray { public:
MyArray();
MyArray(int capacity);
MyArray(const MyArray& array); ~MyArray(); //尾插法
void push_Back(int val); //根据索引获取值
int getData(int index); //根据索引设置值
void setData(int index,int val); private:
int *pAdress;
int m_Size;
int m_Capacity; }; #endif /* MyArray_hpp */
#include "MyArray.hpp"
#include <iostream>
using namespace std; MyArray::MyArray()
{
this->m_Capacity = ;
this->m_Size = ;
this->pAdress = new int[this->m_Capacity];
} MyArray::MyArray(int capacity){
this->m_Capacity = capacity;
this->m_Size = ;
this->pAdress = new int[this->m_Capacity];
} MyArray::MyArray(const MyArray& array){ this->pAdress = new int[array.m_Capacity];
this->m_Size = array.m_Size;
this->m_Capacity = array.m_Capacity;
} MyArray::~MyArray(){ cout << "析构函数调用" << endl;
if (this->pAdress != NULL) {
delete [] this->pAdress;
this->pAdress = NULL;
} } void MyArray::push_Back(int val){
this->pAdress[this->m_Size] = val;
this->m_Size++;
} int MyArray::getData(int index){
return this->pAdress[index];
} void MyArray::setData(int index, int val){
this->pAdress[index] = val;
}
void test01(){
MyArray *array1 = new MyArray();
//(MyArray *) array1 = 0x0000000100648440
MyArray array2;
/*
{
pAdress = 0x0000000100649240
m_Size = 0
m_Capacity = 100
}
*/
MyArray array = MyArray();
/*
{
pAdress = 0x000000010064b680
m_Size = 0
m_Capacity = 30
}
*/
}
这位老师说的很细 https://blog.csdn.net/qq_35644234/article/details/52702673
C++创建对象时什么时候用*,什么时候不用*的更多相关文章
- C++之创建对象时的new与不new
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test(). 这两种方法都可以实例化一个对象,但是这两种方法有很大的区 ...
- 创建对象时引用的关键字,assign,copy,retain
创建对象时引用的关键字:assign: 简单赋值,不更改索引计数(强引用)copy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索 ...
- C#创建对象时各种初始化属性、字段的方式的执行顺序
创建对象代码如下: new FilterInfo(Student.CreateTimeProperty,"朱七",Express.Equals,Relationship.Or) { ...
- 编写高质量代码改善C#程序的157个建议——建议10: 创建对象时需要考虑是否实现比较器
建议10: 创建对象时需要考虑是否实现比较器 有对象的地方就会存在比较,在.NET的世界中也一样.举个最简单的例子,在UI中,有一个10个人的Salary列表.根据排序的需要,列表要支持针对基本工资来 ...
- C#程序编写高质量代码改善的157个建议【10-12】[创建对象时需要考虑是否实现比较器、区别对待==和Equals]
前言 建议10.创建对象时需要考虑是否实现比较器 建议11.区别对待==和Equals 建议12.重写Equals时也要重写GetHashCode 建议10.创建对象时需要考虑是否实现比较器 有对象的 ...
- 对spring创建对象时为何要使用接口
对spring创建对象时为何要使用接口,而使用接口的实现类会报错 接上一篇问题的解答:Spring AOP获取不了增强类(额外方法)和无法通过getBean()获取对象 此问题发生在动态代理时,比如对 ...
- 用构造函数创建对象时的this的指向问题
用构造函数方式创建对象: function Person(name,age){ this.name=name; this.age=age; this.sayname=function(){ alert ...
- Object-C使用类静态方法创建对象时容易内存泄露
1.所谓使用类的静态方法创建对象,就是指使用类名调用一次它的静态方法(非显式调用alloc)便可以得到一个新建的对象,比如下面两个例子: NSString* str1 = [NSString stri ...
- Java中string 创建对象时 “”和null的差别
null和""的差别 问题一: null和""的差别 String s=null; string.trim()就会抛出为空的exception String s ...
随机推荐
- vscode-常用插件介绍(10大插件)
https://www.cnblogs.com/zhaoshujie/p/9834654.html 本文介绍了目前前端开发最受欢迎的开发工具 VSCode 必装的 10 个开发插件,用于大大提高软件开 ...
- python-网络编程requests模块
urllib模块去请求的确比较麻烦,需要不断的encode和decode:而requests模块就比较方便了,它是基于requests模块开发的第三方模块,安装简单只需要 pip install r ...
- 每天一个Linux命令(37)kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行. kill可将指定的信息送至程序.预设的信息为SIGTERM(15),可将指定程序终止. ...
- python_001
一.python开发1.python基础 -基础 -基本数据类型 -函数 -面向对象2.网络编程3.web框架 -用于写网站4.设计模式 + 算法
- linux下安装python27 nginx 和uwsgi
注意: python27 默认没有安装 pip 和setuptools所以要提前安装.(务必先提前安装python27 哈 ) wget --no-check-certificate https:// ...
- TensorFlow学习笔记9-深度模型的优化
深度模型的优化 回顾概念: 代价函数时训练集上损失函数的平均: \[J(\theta)=E_{(x,y)\sim \hat{p}_{data}}L(f(x;\theta),y) \tag{1}\] 引 ...
- string类find_first_not_of ()方法
string类find_first_not_of ()方法 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://xfqxj.blog. ...
- UVA-10462.Is There A Second Way Left(Kruskal+次小生成树)
题目链接 本题大意:这道题用Kruskal较为容易 参考代码: #include <cstdio> #include <cstring> #include <vector ...
- hive DDL操作
1.创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path ...
- LCD应用程序测试
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl ...