繁体   English   中英

如何初始化unique_ptr

[英]How to initialize a unique_ptr

我正在尝试向我的类添加一个延迟初始化函数。 我不是很精通 C++。 有人可以告诉我我是如何实现它的。

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

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;

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM