2016-04-30 162 views
1

我想用unique_ptr没有成功的数组。
声明unique_ptr大小的正确方法是什么?
(大小是一些参数)。C++ unique_ptr和数组

unique_ptr<A[]> ptr = make_unique<A[]>(size); 

下面是一个例子:

#include <iostream> 
#include <string> 
#include <vector> 
#include <functional> 
#include <memory> 

using namespace std; 

class A { 
    string str; 
public: 
    A(string _str): str(_str) {} 
    string getStr() { 
     return str; 
    } 
}; 

int main() 
{ 
    unique_ptr<A[]> ptr = make_unique<A[]>(3); 
} 

这不是工作,但是,如果我删A的构造函数,它的工作原理。
我想3代表数组的大小,而不是A的构造函数的参数,我该如何做到这一点?

+0

提示:使用4个空格缩进标记文本代码 – Drop

+1

为什么不使用'std :: unique_ptr > ptr = make_unique >(3);'? –

+0

或者'std :: unique_ptr > ptr = make_unique >();' –

回答

1

但是,这不起作用,如果我删除了A的构造函数,它的作用就是 。

当您删除用户定义的构造函数时,编译器将隐式生成一个默认构造函数。当您提供用户定义的构造函数时,编译器不会隐式地生成默认构造函数。

std::make_unique<T[]>需要使用默认构造函数...

所以,提供一个和所有应该工作以及

#include <iostream> 
#include <string> 
#include <vector> 
#include <functional> 
#include <memory> 

using namespace std; 

class A { 
    string str; 
public: 
    A() = default; 
    A(string _str): str(_str) {} 
    string getStr() { 
     return str; 
    } 
}; 

int main() 
{ 
    unique_ptr<A[]> ptr = make_unique<A[]>(3); 
} 
+0

在这种情况下,3代表ptr的大小?即,ptr现在包含3个指针? – user5618793

+1

@ user5618793这就是答案;如果你没有意识到它,当你的类中没有其他构造函数时,就会有一个隐式定义的默认构造函数,这就是为什么当你注释掉用户定义的构造函数时你的代码工作的原因。 –

+0

@bku_drytt我知道,我只是没有看到在我的代码中使用'A()'< - 空构造函数,所以我不明白错误 – user5618793