如何初始化 unique_ptr

How to initialize a unique_ptr

我正在尝试向我的 class 添加延迟初始化函数。我不是很精通C++。谁能告诉我我是如何实现的。

我的 class 有一个私有成员定义为:

std::unique_ptr<Animal> animal;

这是采用一个参数的原始构造函数:

MyClass::MyClass(string file) :
animal(new Animal(file))
{}

我刚刚添加了一个无参数构造函数和一个 Init() 函数。这是我刚刚添加的 Init 函数:

void MyClass::Init(string file)
{
    this->animal = ???;
}

我需要在那里写什么才能让它等同于构造函数正在做的事情?

#include <memory>
#include <algorithm>
#include <iostream>
#include <cstdio>

class A
{
public :
    int a;
    A(int a)
    {
        this->a=a;

    }
};
class B
{
public :
    std::unique_ptr<A> animal;
    void Init(int a)
    {
        this->animal=std::unique_ptr<A>(new A(a));
    }
    void show()
    {
        std::cout<<animal->a;
    }
};

int main()
{
    B *b=new B();
    b->Init(10);
    b->show();
    return 0;
}

我觉得animal.reset(new Animal(file))就是你想要的。

http://en.cppreference.com/w/cpp/memory/unique_ptr/reset

#include<iostream>
#include<memory>
#include<iostream>

class Amm{

    public:
    std::unique_ptr<double> myVar;
    explicit Amm(std::unique_ptr<double> ptr):myVar{ptr.release()}{}
};

int main(){
    Amm a(std::make_unique<double>(5));
    std::cout<<*a.myVar;

    return 0;

}