-
(1)new运算符在创建对象的时候会自动调用构造函数 (2)malloc函数只是分配内存空间,而不会自动调用构造函数查看全部
-
class Corrdinate { public: Corrdinate(); ~Corrdinate(); public: int m_iX; int m_iY; }; #include "Coordinate.h" #include <iostream> using namespace std; Corrdinate::Corrdinate() { cout << "Coordinate" <<endl; } Corrdinate::~Corrdinate() { cout << "~Corrdinate" <<endl; } #include <iostream> #include <stdlib.h> #include "Coordinate.h" using namespace std; int main(void) { //Corrdinate *p1 = NULL; //p1 = new Corrdinate; //Corrdinate *p2 = new Corrdinate(); //p1->m_iX = 10; //p1->m_iY = 20; //(*p2).m_iX =30; //(*p2).m_iY =40; //cout <<p1->m_iX +(*p2).m_iX <<endl; //cout <<p1->m_iY +(*p2).m_iY <<endl; //delete p1; //p1= NULL; //delete p2; //p2 = NULL; Corrdinate p1; Corrdinate *p2 = &p1; p2->m_iX = 10;//(*p2).m_iX = 10; p2->m_iY = 20;//(*p2).m_iY = 20; cout <<p1.m_iX <<endl; cout <<p1.m_iY <<endl; system("pause"); return 0; }查看全部
-
浅拷贝就是直接将数据成员的值直接赋值过去,不包含指针就行,如果包含指针,就会把两个对象的指针指向了同一个内存空间,容易发生错误。查看全部
-
(1)如果数据成员中不包含指针的话就用浅拷贝构造函数就行 (2)如果包含了指针就需要用到深拷贝构造函数,即为该指针在堆上开辟一块内存空间。查看全部
-
#include <iostream> #include <stdlib.h> #include "Array.h" using namespace std; int main() { Array arr1(5); Array arr2(arr1); arr1.printArr(); arr2.printArr(); system("pause"); return 0; }查看全部
-
class Array { public: Array(int count); Array(const Array &arr); ~Array(); void setCount(int count); int getCount(); void printAddr(); void printArr(); private: int m_iCount; int *m_pArr; }; #include"Array.h" #include <iostream> using namespace std; Array::Array(int count) { m_iCount = count; m_pArr=new int[m_iCount]; for(int i=0;i<m_iCount;i++) { m_pArr[i]=i; } cout << "Array" <<endl; } Array::Array(const Array &arr) { m_iCount = arr.m_iCount; m_pArr =new int[m_iCount]; for(int i=0;i<m_iCount;i++) { m_pArr[i] = arr.m_pArr[i]; } cout <<"Array&" <<endl; } Array::~Array() { delete []m_pArr; m_pArr = NULL; cout <<"~Array" <<endl; } void Array::setCount(int count) { m_iCount = count; } int Array::getCount() { return m_iCount; } void Array::printAddr() { cout <<"m_pArr=" <<m_pArr <<endl; } void Array::printArr() { for(int i=0;i<m_iCount;i++) { cout << m_pArr[i] <<endl; } }查看全部
-
class Array { public: Array(); Array(const Array &arr); ~Array(); void setCount(int count); int getCount(); private: int m_iCount; }; #include"Array.h" #include <iostream> using namespace std; Array::Array() { cout << "Array" <<endl; } Array::Array(const Array &arr) { m_iCount = arr.m_iCount; cout <<"Array&" <<endl; } Array::~Array() { cout <<"~Array" <<endl; } void Array::setCount(int count) { m_iCount = count; } int Array::getCount() { return m_iCount; } #include <iostream> #include <stdlib.h> #include "Array.h" using namespace std; int main() { Array arr1; arr1.setCount(5); Array arr2(arr1); cout << "arr2.m_iCount="<<arr2.getCount() <<endl; system("pause"); return 0; }查看全部
-
类的组合,先实例化对象,调用的是对象是数据成员的构造函数,然后再调用外类的构造函数;销毁是先调用,外类的析构函数,然后再调用内类的析构函数。查看全部
-
(1)堆中实例化的数组需要手动销毁释放内存. (2)在栈中实例化的数组,系统自动回收内存 (3)delete []p; //必须写[],不然系统只是销毁第一个数组中的对象元素查看全部
-
[0]的位置是相对于指针p指向而言,当p++;后,p[0]指向第二个元素! p经处理后可能已指向不是最初的内存地址,所以必须还原后才能delete查看全部
-
sizeof如果是两个int对象成员,则占8*2=16个内存单元,如果是两个指针的单元,则只占4*2=8个内存查看全部
-
构造函数用默认的时,加不加括号都是对的查看全部
-
new会自动调用类的构造函数。查看全部
-
对象成员: 申请:先顺序实例化对象成员,最后实例化类对象。 释放:先销毁类对象,后将对象成员中最后实例化的释放,依次类推。查看全部
-
深拷贝首先申请一段内存,然后将这段内存中每个值依次拷贝查看全部
举报
0/150
提交
取消