在构造函数中使用原始指针以将其立即封装在智能指针中,这被认为是错误的做法吗



我希望用户不必创建智能指针来自己传递到对象构造函数中,而是传递一个原始指针,然后在初始化过程中转换为智能指针。然而,有一些关于创建内存泄漏的警告铃声响起,所以我想检查一下:以下代码有任何问题吗?


#include <memory>
using namespace std;
class A {
private:
std::unique_ptr<int> num;
public:
explicit A(int* n){
num = std::make_unique<int>(*n);
}
};
int main(){
int n = 4;
A a(&n); 
// A a(std::make_unique<A>(n)); // instead of having to do this, which is a moderately irritating 
};

如果您想避免在接口中使用智能指针,您可以使用by-value或const-reference:

class A {
private:
std::unique_ptr<int> num;
public:
explicit A(int n) : num(std::make_unique<int>(n)) {}
};

相关内容

  • 没有找到相关文章

最新更新