排序:
默认
按更新时间
按访问量
RSS订阅

C++ 如何限制一个类对象只在栈(堆)上创建

  1 概述 昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间? 一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。 在C++中,类的对象建...

2018-08-19 14:49:51

阅读数:67

评论数:0

c++内存分配方式

  1 内存分配方式       内存分配方式有三种:        (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。    (2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,...

2018-08-18 21:00:30

阅读数:24

评论数:0

C++中的RVO与NVR优化

1 概念   RVO技术(return value optimization,匿名返回值优化) NRVO技术(Named Return Value Optimization,具名返回值优化)   关键: (1) 语义上,函数调用结束,返回值会通过拷贝构造一个临时匿名对象传出来(因为函数...

2018-08-16 23:59:38

阅读数:58

评论数:0

C++ 避免隐藏继承而来的名称(为什么会有类函数隐藏?)

      关于C++中继承这个概念相比大家都很熟悉,那么子类究竟能从父类继承到哪些东西,哪些东西又是子类继承不到的呢?可能很多人都会觉得父类所有的东西都会被子类继承,包括成员函数和成员变量,否则就违背了“父子关系”这字面上的意思,其实不然,首先我们先看一小段简单的代码,这段代码很容易理解  ...

2018-04-17 20:27:59

阅读数:54

评论数:0

C++ 虚函数表解析

前言     C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTT...

2018-04-15 16:16:38

阅读数:32

评论数:0

C++类内存分布

1 环境搭建    书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来:      先选择左侧的C/C++-&...

2018-04-14 23:56:51

阅读数:42

评论数:0

谈谈C++继承中的重载,覆盖和隐藏

    写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide)。在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的,他们是英语专业的),常常把重载(overload)和覆盖(override)搞错!  我...

2018-04-14 10:41:02

阅读数:65

评论数:0

单继承与多继承中的虚函数表和虚函数指针

编译环境: VS 2013首先,我们了解一下何为单继承,何为多继承??单继承:一个子类只有一个直接父类。多继承:一个子类有两个或多个直接父类。单继承中的虚函数表分析:示例程序:#include <iostream> using namespace s...

2018-04-02 16:20:01

阅读数:40

评论数:1

关于C++全局变量和静态变量初始化的一些总结

1.全局变量    全局变量无疑要在main函数开始前执行完成,但可细分为在编译时和在运行时初始化,即static initialization和dynamic initialization。 static initialization           静态初始化按照我的理解,是针对那些较为简...

2018-03-22 23:33:59

阅读数:158

评论数:0

bss段

1. 理论BSS(Block Started by Symbol)用来存储未初始化的全局变量和静态变量,全局变量或静态变量值为0或NULL(对于指针变量而言)的通常会被编译器认为未初始化,属于静态内存分配区,不会占用程序文件空间,不存储这些变量在外存上,但是还是会占用一部分空间,这些空间用来标识未...

2018-03-21 22:53:59

阅读数:46

评论数:0

C/C++中volatile的用法

代码编译环境:Windows7 32bits+VS2012。volatile是“易变的”、“不稳定”的意思。volatile是C/C++的一个较为少用的关键字,它用来解决变量在“共享”环境下容易出现的读取错误的问题。1.volatile的作用定义为volatile的变量是说这变量可能会被意想不到地...

2018-03-18 23:04:35

阅读数:136

评论数:0

静态函数能否为virtual或者const函数

1. virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。#include<iostream> class Test { public: // 编译错误:static成员函数不能声明...

2018-03-18 16:21:57

阅读数:74

评论数:0

《深度探索C++对象模型》读书笔记

前 言 Stanley B.Lippman1.   任何对象模型都需要的三种转换风味:ü        与编译器息息相关的转换ü        语言语义转换ü        程序代码和对象模型的转换 2.   C++对象模型的两种解释ü        语言中直接支持面向对象程序设计的部分ü    ...

2018-03-12 23:59:49

阅读数:56

评论数:0

编译器合成复制构造函数

定义:      只有单个形参,该形参是对本类类型对象的引用(常用const修饰),这样的构造函数成为复制构造函数。使用方式:(1)显示使用----用一个同类型的对象初始化该对象时;(2)隐式使用----将该类型的对象传递给函数或从函数返回该类型对象时。三种类型的复制构造函数:*bitwise c...

2018-03-12 20:19:02

阅读数:66

评论数:0

《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

之前一直对C++内部的原理的完全空白,然后找到《Inside The C++ Object Model》这本书看了下, 感觉收获很大,因为书写得比较早,有些知识应该要更新,但是还是值得好好研读,由于该书的内容给人比较散的感觉,所以一直想找个时间整理一下,遂成此文,虽然都是抄书上的,但是却让我有了温...

2018-03-10 21:16:22

阅读数:77

评论数:0

第二章构造函数语义学——关于bitwise copy semantics

  关于这个问题,第一遍看的时候比较晕,不知道这个什么 bitwise copy是个什么东西,其实很简单,就是 位逐次拷贝(我靠,一句好犀利的废话)。额,具体来说呢,就是对 源类中的成员变量 中的每一位 都逐次 复制到 目标类中。具体的内容接着看。首先让我们看看这个概念是怎么出来的。书中第50页的...

2018-03-10 18:55:12

阅读数:46

评论数:0

虚基类的作用

1 概念    首先还是先给出虚继承和虚基类的定义。虚继承:在继承定义中包含了virtual关键字的继承关系;虚基类:在虚继承体系中的通过virtual继承而来的基类,需要注意的是:CSubClass : public virtual CBase {}; 其中CBase称之为CSubClass的虚...

2018-03-07 22:10:34

阅读数:116

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭