Remark(关于生存期和new指针动态存储若干问题的讨论):
Problem 1
c++中主要的存储空间有静态存储空间、栈存储空间、堆存储空间
如果在函数体内部声明了一个new指针而返回了该指针指向对象的引用而并非该new指针时,我们讲无法得到这个地址的值,因为地址(new指针)在函数中是局部变量,所以就会导致 内存泄漏 问题:(如下例)
#include<iostream>
using namespace std;
int Fn1();
int main()
{
int a=Fn1();
cout<<"The vale of a is:"<<a<<endl;
return 0;
}
int Fn1()
{
int * p=new int(15);
return * p;
}
这里的*(p)就无法找到地址了
解决方案:
int fun()
{
int * p = new int(15);
int R = *p; //如果返回一个值,就可以用一个普通变量来暂存这个值。
delete p;
return R;
}
Problem 2
派生说明符只会影响自身用户对成员的访问权限以及该派生类的派生类成员函数和友元对该派生类成员的访问权限
- Note
公有继承所有的成员的访问等级不变;private继承则所有的成员访问等级变为private;protected继承则除了private外所有成员访问等级变为protected。影响有二:
(1)对于派生类的用户来说只能访问public成员
(2)对于派生类的派生类的成员和友元来说访问等级会有变化:对于成员来说直接基类的private成员不可访问;对于友元来说直接基类的private和protected成员都不可访问
class Base
{
public:
std::size_t pub = 0;
protected:
std::size_t prot = 0;
private:
std::size_t priv = 0;
};
class Deri_pub:public Base{};
class Deri_pri:private Base{};
class Deri_prot:protected Base{};
//private 不会改变派生类对直接基类的访问权限,访问权限只和直接基类自身的派生访问有关
class Deri_from_prot : private Deri_prot
{
public:
void test () {prot = 1;}
void test_2 () {pub = 1;priv = 1;} //可以给pub 赋值,因为此时pub是protected成员;但不可以给priv赋值,因为priv还是private成员
};
Deri_pri pri;
Deri_prot prot;
prot.pub = 1;//错误,因为pub在Deri_prot 中是protected成员了,对用户不可见
}
- 转载自天极网(作者:fatalerror99责任编辑:方舟) ↩