草庐IT

new_folder

全部标签

java - 多态性:为什么使用 "List list = new ArrayList"而不是 "ArrayList list = new ArrayList"?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:WhyshouldtheinterfaceforaJavaclassbeprefered?我应该什么时候使用Listlist=newArrayList();ArrayList继承自List,所以如果ArrayList中的某些功能不在List中,那么我会失去ArrayList的一些特性,对吧?并且编译器在尝试访问这些方法时会注意到错误? 最佳答案 您这样做的主要原因是将您的代码与接口(interface)的特定实现分离。当您像这样编写代码时:Listlist

c++ - 运算符 new 将内存初始化为零

有这样的代码:#includeintmain(){unsignedint*wsk2=newunsignedint(5);std::cout结果:wsk2:0x928e0085wsk2:0x928e0080我读到new不会用零初始化内存。但在这里似乎确实如此。它是如何工作的? 最佳答案 有两个版本:wsk=newunsignedint;//defaultinitialized(ienothinghappens)wsk=newunsignedint();//zeroinitialized(iesetto0)也适用于数组:wsa=newu

c++ - 使用堆内存(malloc/new)会创建一个不确定的程序吗?

几个月前,我开始使用C语言为空间应用程序开发实时系统软件,也为使用C++的微Controller开发软件。在这样的系统中有一条经验法则是永远不应该创建堆对象(所以没有malloc/new),因为它使程序非确定性。当人们告诉我时,我无法验证这句话的正确性。那么,这是一个正确的说法吗?让我感到困惑的是,据我所知,确定性意味着运行一个程序两次将导致完全相同的执行路径。据我了解,这是多线程系统的一个问题,因为多次运行同一个程序可能每次都有不同的线程以不同的顺序运行。 最佳答案 在实时系统的上下文中,确定性不仅仅是可重复的“执行路径”。另一个

c++ - 如何使 `new[]` 默认初始化原始类型数组?

我不时需要为内置类型(通常是char)调用new[]。结果是一个具有未初始化值的数组,我必须使用memset()或std::fill()来初始化元素。如何使new[]默认初始化元素? 最佳答案 int*p=newint[10]()应该可以。但是,如Michaelpointsout,使用std::vector会更好。 关于c++-如何使`new[]`默认初始化原始类型数组?,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 如何使 `new[]` 默认初始化原始类型数组?

我不时需要为内置类型(通常是char)调用new[]。结果是一个具有未初始化值的数组,我必须使用memset()或std::fill()来初始化元素。如何使new[]默认初始化元素? 最佳答案 int*p=newint[10]()应该可以。但是,如Michaelpointsout,使用std::vector会更好。 关于c++-如何使`new[]`默认初始化原始类型数组?,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 使用 new 运算符初始化数组

我想以使用逗号分隔花括号括起来的元素的格式初始化一个数组,例如:intarray[10]={1,2,3,4,5,6,7,8,9,10};但是,我需要使用new运算符来分配内存,例如:int*array=newint[10];有没有办法组合这些方法,以便我可以使用new运算符分配内存并使用花括号初始化数组? 最佳答案 在新的C++标准(C++11)中,您可以这样做:int*a=newint[10]{1,2,3,4,5,6,7,8,9,10};它被称为初始化列表。但在以前的标准版本中这是不可能的。具有更多详细信息(并且很难阅读)的相关在

c++ - 使用 new 运算符初始化数组

我想以使用逗号分隔花括号括起来的元素的格式初始化一个数组,例如:intarray[10]={1,2,3,4,5,6,7,8,9,10};但是,我需要使用new运算符来分配内存,例如:int*array=newint[10];有没有办法组合这些方法,以便我可以使用new运算符分配内存并使用花括号初始化数组? 最佳答案 在新的C++标准(C++11)中,您可以这样做:int*a=newint[10]{1,2,3,4,5,6,7,8,9,10};它被称为初始化列表。但在以前的标准版本中这是不可能的。具有更多详细信息(并且很难阅读)的相关在

c++ - Malloc vs new——不同的填充

我正在为我们的项目审查其他人的C++代码,该项目使用MPI进行高性能计算(10^5-10^6核)。该代码旨在允许(可能)不同架构上的不同机器之间进行通信。他写了一条评论,内容大致如下:We'dnormallyusenewanddelete,buthereI'musingmallocandfree.Thisisnecessarybecausesomecompilerswillpadthedatadifferentlywhennewisused,leadingtoerrorsintransferringdatabetweendifferentplatforms.Thisdoesn'thap

c++ - 'new operator' 和 'operator new' 之间的区别?

“newoperator”和“operatornew”有什么区别? 最佳答案 我通常会尝试用不同的措辞来更好地区分两者,但无论如何这是一个好问题。Operatornew是一个分配原始内存的函数——至少在概念上,它与malloc()没有太大区别。尽管除非您编写自己的容器之类的东西,否则这是相当不寻常的,但您可以直接调用operatornew,例如:char*x=static_cast(operatornew(100));也可以全局或为特定类重载operatornew。IIRC,签名是:void*operatornew(size_t);

c++ - 有没有一种方法可以在不使用 new 的情况下从函数返回抽象(出于性能原因)

例如,我有一些函数pet_maker()创建并返回Cat或Dog作为基础Pet。我想多次调用这个函数,并对返回的Pet做一些事情。传统上我会在pet_maker()中newCat或Dog并返回一个指向它的指针,但是new调用比在堆栈上执行所有操作要慢得多。是否有任何人都可以想到的一种简洁的方式来返回抽象,而不必在每次调用函数时都进行新的操作,或者是否有其他方式可以快速创建和返回抽象? 最佳答案 如果你想要多态性,使用new几乎是不可避免的。但是new工作缓慢的原因是因为它每次都在寻找空闲内存。您可以做的是编写自己的操作符new,理论