隐式初始化和显式初始化有什么区别
What is the difference between initializing with implicitly and explicitly?
在以下情况下,使用运算符new
初始化变量i
和j
以及使用std::auto_ptr
初始化k
和l
有什么区别:
void foo() {
// some code ...
int* i(new int);
int* j = new(int);
// ... more code
std::auto_ptr<int> k(returnsIntPtr());
std::auto_ptr<int> l = returnsIntPtr();
// ... some more code
//delete i and j
}
编辑:为了清楚起见,我对i
和j
之间的初始化差异以及k
和l
之间的差异感兴趣。我知道使用new
和auto_ptr
的区别。
new(int)
相当于
new int
在看了[expr.new]中的语法之后,
新表达式:
::
optnew
新建位置opt新型id新初始值设定项opt::
optnew
新放置option(
类型id)
新初始值设定项opt
意图是明确的:有些类型不能用传统的new type(..)
方式解析
例如,
auto i = new int(*)(); // Doesn't compile
auto j = new (int(*)()); // ... you guessed it
声明中的第二个区别,即直接初始化与复制初始化,对标量没有区别。因此,这些声明是完全等效的:
int* i(0);
int* i = 0;
第二种通常更受欢迎。
std::auto_ptr(或唯一或共享指针)是一个智能指针。这是c++的一个特性,它使您不必关心堆中分配的内存的破坏成为可能。例如,如果你用新创建了一些东西,但不删除它,你可能会遇到巨大的问题,甚至导致崩溃,智能指针会处理这些证据。
如果你只想知道显式或隐式创建它们之间的区别。。。据我所知,几乎没有什么真正的区别。
相关文章:
- 未初始化的变量有什么危险
- 初始化或分配空字符串文字到指向 C 中的 char 的指针或指向 C++ 中 const char 的指针的原因是什么
- 不同的类或结构初始化方法之间的性能差异是什么?
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 静态初始化的反义词是什么?
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- 初始化不是整数的巨大常量多维数组的最佳方法是什么?
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 初始化类成员的更好做法是什么?
- C++初始化的结果是什么?
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 这些初始化之间有什么区别?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 构造函数中没有参数的对象类成员按什么顺序初始化?
- 两种初始化有什么区别:Foo f();Foo f = Foo()
- 在多个对象中初始化预定义成员变量的正确方法是什么?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- 在C++中初始化带有和不使用构造函数调用的对象有什么区别
- C++11 大括号/聚合初始化.什么时候使用它?