c++对象创建带括号与无括号的区别

class Test{public:  Test() {}  Test(int a) {}}
1、栈上创建对象  1.1 无括号    Test a; // 调用默认构造函数,栈上分配内存创建对象
  1.2 有括号    Test a(); // 无任何意义,声明一个返回值为Test对象的无参函数
  1.3 有括号+参数    Test a(2); // 调用构造函数Test(int a),栈上分配内存创建对象

2、堆上创建对象  2.1 无括号    Test *a = new Test; // 调用默认构造函数(若由编译器生成则成员不初始化),堆上分配内存创建对象
  2.2 有括号    Test *a = new Test(); // 调用默认构造函数(若由编译器生成则成员初始化),堆上分配内存创建对象
  2.3 有括号+参数    Test *a = new Test(2); // 调用构造函数Test(int a),堆上分配内存创建对象
  2.4 系统内置类型    new int;// 分配内存,未初始化    new int();// 分配内存,初始化为0    new int(2);// 分配内存,初始化为2
时间: 2024-08-27 12:54:25

c++对象创建带括号与无括号的区别的相关文章

有括号 or 无括号

在编写Scala程序的时候,经常会定义或调用一些方法,经常会发现某些无参方法既可以写括号调用也可以不加括号调用,在开发者定义方法时也会面临这样的选择,看起来对我们的程序并没有什么影响,但是对于一些标准还是遵守比较好. Scala鼓励将不带参数且没有副作用的方法定义为无参数的风格,即省略空括号.但是对于有副作用的方法不要这样做,因为那样看起来像是在使用字段.例如:println(). 另一种判断的方法是:如果你调用的函数执行了操作就使用括号,但如果仅提供了对某个属性的访问,那么省略空括号.

13 类对象的声明中加小括号{}和不加小括号{}的区别

以下代码有什么问题? struct Test { Test( int ) {} Test() {} void fun() {} }; void main( void ) { Test a(1); a.fun(); Test b(); b.fun(); } A b.fun()会出错 B Test结构的定义中应该加上public修饰符,才能main函数值调用该类的方法 C Test(int) {}改成Test(int a) {} D 以上说法都错误 解答: b.fun();   //b不是Test的

栈的应用 -- 无括号表达式的求值

package com.learn.algorithm.expression; import java.util.HashMap; import java.util.Map; import java.util.Stack; /** * 无括号表达式求值 * @author Jiekun.Cui * */ public class Expression { /** * 操作符的优先级定义 */ public static Map<String,Integer> optProirity = nul

使用eval()将json字符串转换为对象要多加一个小括号

使用eval()将json字符串转换为对象要多加一个小括号:关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval()函数将json格式字符串转换为对象的时候,需要多嵌套一层小括号,下面就介绍一下它的原因,希望能够对需要的朋友带来帮助.先看一段转换代码: var jsonStr='{"webName":"蚂蚁部落","webAddress":"青岛市南区

函数基础重点掌握内容:创建函数、return返回单个值、return返回多个值、函数名加括号与不加括号的区别

##比较两个数大小 #有参函数!!! def compare(s,t): if s > t: print(s) else: print(t) f=compare compare(1000,30) f(1800,30) """有几个参数传几个参数,形参对应实参,一个也不能少""" ''' 2.函数名加括号与不加括号的区别: 函数名加括号与不加括号的区别: --在这个函数中,return返回的是inner, 内部其实是返回inner函数的运行结

【Java基础】Java类的加载和对象创建流程的详细分析

相信我们在面试Java的时候总会有一些公司要做笔试题目的,而Java类的加载和对象创建流程的知识点也是常见的题目之一.接下来通过实例详细的分析一下. 实例问题 实例代码 Parent类 1 package mytest.javaBase; 2 3 public class Parent { 4 int a = 10; 5 static int b = 11; 6 // 静态代码块 7 static { 8 System.out.println("Parent静态代码块:b=" + b)

深入理解java虚拟机(二)HotSpot Java对象创建,内存布局以及访问方式

内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载.解析并初始化.如果没有完成这个过程,则必须执行相应类的加载. (二)在堆上为对象分配空间.对象需要的空间大小在类加载完成后便能确定.之后便是在堆上为该对象分配固定大小的空间.分配的方式也有两种:

《C++编程思想》 第十二章 动态对象创建 (习题+解答)

一.相关知识点 重载new和delete 当创建一个new表达式时有两件事发生.首先,使用运算符new分配内存,然后调用构造函数.在delete表达式里,调用析构函数,然后使用运算符delete释放内存.我们永远无法控制构造函数和析构函数的调用(否则我们可能意外地搅乱它们),但可以改变内存分配函数运算符new和delete. 被new和delete使用的内存分配系统是为通用目的而设计的.但在特殊的情形下,它不能满足我们的需要.改变分配系统的原因是考虑效率:我们也许要创建和销毁一个特定的类的非常多

sas宏(3)宏,调试宏,创建带参数的宏,理解符号表(全局宏与局部宏解析),宏条件运算符,在宏中进行运算

宏类似于c中的函数,传入指定参数后执行,并且宏内部可以包含data步程序和条件运算符号. 宏变量只是小小的变量....(by the way作用也很大) 1:宏的基本语法 如何创建一个简单的宏并使用? %macro prtlast; proc print data=&syslast (obs=5); title "Listing of &syslast data set"; run; %mend; %prtlast /*不要加分号,加了有可能出错*/ 宏创建过程中做了什