`unique_ptr<Sample> sp1(new Sample);` `unique_ptr<Sample> sp1(new Sample());` 和 `unique_ptr[= 之间的区别10=] sp2(新样本{});`
Differences among `unique_ptr<Sample> sp1(new Sample);` `unique_ptr<Sample> sp1(new Sample());` and , `unique_ptr<Sample> sp2(new Sample{});`
unique_ptr<Sample> sp1(new Sample);
unique_ptr<Sample> sp1(new Sample());
和unique_ptr<Sample> sp2(new Sample{});
有什么区别?我发现它们都是合法的 indeed.You 可以在 http://cpp.sh/3icui.
上查看
我是 C++ 的新手。我反复思考但仍然可以得到 idea.I 将感谢任何关于此问题的提示。
#include <iostream>
#include <vector>
#include <memory>
#include <cstdio>
#include <fstream>
#include <cassert>
#include <functional>
using namespace std;
class Sample {
public:
Sample() { cout << "Sample Constuctor" << endl; }
~Sample() { cout << "Sample Destructor" << endl; }
void publicFn() { cout << "This is public function of class" << endl; }
};
int main() {
unique_ptr<Sample> sp1(new Sample{});
unique_ptr<Sample> sp2(new Sample());
unique_ptr<Sample> sp3(new Sample);
sp1->publicFn();
sp2->publicFn();
return 0;
}
{}可以在没有构造函数的情况下直接初始化成员数据。
() 只能在没有带参数的构造函数的情况下不带任何参数使用。
在您的情况下,它们将执行相同的操作,因为您有一个已定义的构造函数。
一个简单的例子:
struct h
{
int tmp=3;
int k=3;
};
int main()
{
h h1{6, 4};
h h2;
std::cout << h1.tmp << std::endl;
std::cout << h2.tmp << std::endl;
return 0;
}
这里的效果是一样的
new Sample()
执行value initalization,对象由Sample
.
的默认构造函数初始化
new Sample{}
通过Sample
的默认构造函数执行list initialization (since C++11), as the effect the object is also value-initialized。
顺便说一句:new Sample
也有同样的效果,它执行default initialization并且对象也由默认构造函数初始化。
这些初始化样式的效果取决于上下文,尤其是类型的行为方式。 class Sample
都是一样的效果
unique_ptr<Sample> sp1(new Sample);
unique_ptr<Sample> sp1(new Sample());
和unique_ptr<Sample> sp2(new Sample{});
有什么区别?我发现它们都是合法的 indeed.You 可以在 http://cpp.sh/3icui.
我是 C++ 的新手。我反复思考但仍然可以得到 idea.I 将感谢任何关于此问题的提示。
#include <iostream>
#include <vector>
#include <memory>
#include <cstdio>
#include <fstream>
#include <cassert>
#include <functional>
using namespace std;
class Sample {
public:
Sample() { cout << "Sample Constuctor" << endl; }
~Sample() { cout << "Sample Destructor" << endl; }
void publicFn() { cout << "This is public function of class" << endl; }
};
int main() {
unique_ptr<Sample> sp1(new Sample{});
unique_ptr<Sample> sp2(new Sample());
unique_ptr<Sample> sp3(new Sample);
sp1->publicFn();
sp2->publicFn();
return 0;
}
{}可以在没有构造函数的情况下直接初始化成员数据。
() 只能在没有带参数的构造函数的情况下不带任何参数使用。
在您的情况下,它们将执行相同的操作,因为您有一个已定义的构造函数。
一个简单的例子:
struct h
{
int tmp=3;
int k=3;
};
int main()
{
h h1{6, 4};
h h2;
std::cout << h1.tmp << std::endl;
std::cout << h2.tmp << std::endl;
return 0;
}
这里的效果是一样的
new Sample()
执行value initalization,对象由Sample
.
new Sample{}
通过Sample
的默认构造函数执行list initialization (since C++11), as the effect the object is also value-initialized。
顺便说一句:new Sample
也有同样的效果,它执行default initialization并且对象也由默认构造函数初始化。
这些初始化样式的效果取决于上下文,尤其是类型的行为方式。 class Sample
都是一样的效果