使用运算符i
和j
以及new
使用k
初始化变量l
和std::auto_ptr
有什么不同以下内容:
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
的区别。
答案 0 :(得分:2)
new(int)
相当于
new int
查看[expr.new]中的语法后,
new-expression :
::
选择new
new-placement opt 新型-ID 强> new-initializer opt
::
optnew
new-placement opt(
type-id)
新初始化<子>选择子> 的
目的很明确:有些类型在传统的new type(..)
方式中无法解析
例如,
auto i = new int(*)(); // Doesn't compile
auto j = new (int(*)()); // ... you guessed it
<小时/> 声明的第二个区别,即直接初始化与复制初始化,对标量没有影响。所以这些陈述完全等同:
int* i(0);
int* i = 0;
第二个通常更受欢迎。
答案 1 :(得分:0)
std :: auto_ptr(或唯一或共享指针)是一个智能指针。它是c ++的一个特性,它可以让你不必关心堆中已分配内存的破坏。
例如,如果你用new创建一些东西并且不删除它,你可能会遇到很大问题甚至导致崩溃,智能指针会处理这些证据。
如果你只是想知道明确或隐含地创造它们之间的区别......据我所知,几乎没有真正的区别。