如何在类中使用结构的std :: unique_ptr?

时间:2019-08-02 04:10:58

标签: c++ class struct unique-ptr

如何在类中使用结构的std::unique_ptr?像这样的东西,例如:

#include <cstdio>
#include <memory>

int main(void)
{
    struct a_struct
    {
        char a_char;
    };

    class A_class
    {
    public:
        A_class()
        {
            this->my_ptr.a_char = 'A';
        }
        void A_class_function()
        {
            printf("%c\n",this->my_ptr.a_char);
        }
        ~A_class()
        {

        }
    private:
    std::unique_ptr<a_struct> my_ptr(new a_struct);
    };

    A_class My_class;

    My_class.A_class_function();

    My_class.~A_class();

    return(0);
}

编译时,它返回此错误,我不确定该怎么处理:

ptr_test.cpp: In function ‘int main()’:
ptr_test.cpp:27:39: error: expected identifier before ‘new’
  std::unique_ptr<a_struct> my_ptr(new a_struct);
                                   ^~~
ptr_test.cpp:27:39: error: expected ‘,’ or ‘...’ before ‘new’
ptr_test.cpp: In constructor ‘main()::A_class::A_class()’:
ptr_test.cpp:16:14: error: invalid use of member function ‘std::unique_ptr<main()::a_struct> main()::A_class::my_ptr(int)’ (did you forget the ‘()’ ?)
    this->my_ptr.a_char = 'A';
    ~~~~~~^~~~~~
ptr_test.cpp: In member function ‘void main()::A_class::A_class_function()’:
ptr_test.cpp:20:28: error: invalid use of member function ‘std::unique_ptr<main()::a_struct> main()::A_class::my_ptr(int)’ (did you forget the ‘()’ ?)
    printf("%c\n",this->my_ptr.a_char);

该如何解决?我应该怎么做这样的事情?

1 个答案:

答案 0 :(得分:3)

对于第一个错误,您无法使用要使用的构造函数语法初始化类声明中的类成员。

使用花括号代替括号:

class A_class
{
    ...

private:
    std::unique_ptr<a_struct> my_ptr{new a_struct};
};

或者,如果您有C ++ 14编译器:

class A_class
{
    ...

private:
    std::unique_ptr<a_struct> my_ptr = std::make_unique<a_struct>();
};

否则,请改用A_class构造函数的成员初始化列表:

class A_class
{
public:
    A_class() : my_ptr(new a_struct)
    {
        ...
    }

    ...

private:
    std::unique_ptr<a_struct> my_ptr;
};

对于其他错误,a_chara_struct的成员,而不是std::unique_ptr,因此您需要使用my_ptr->a_char而不是my_ptr.a_char来访问它。

this->my_ptr->a_char = 'A';
...
printf("%c\n", this->my_ptr->a_char);