c++ - Std::Array with unique_ptr

标签 c++ arrays templates smart-pointers

我有一个类,我希望通过传递一组值来实例化它。此处的对象有两个成员,但为了便于说明,已对其进行了缩减。将来我将从磁盘读取值,然后从这些值创建一个对象,因此创建数组。该对象稍后将有多个指针,因此有 shared_ptr。

首先,我想知道这是否可以防止内存泄漏。其次,我想知道是否有不那么臃肿的方法来实例化对象,然后确定性地销毁它们。

类头文件:

//MyClass.hpp
#pragma once
#include "stdafx.h"
#include <array>

class SimpleClass{
    private:
        //Per object
        double var1;
        double var2;
    public static:
        //For calling when using templates such as std::array<>
        //Using __int8 as will not be > 256
        static const uint8_t varCount 2;
        SimpleBody(std::array<double, varCount> inputArray);
        ~SimpleBody();
}

类实现

//MyClass.cpp
#pragma once
#include "stdafx.h"
#include <array>
#include "body.hpp"

SimpleBody::SimpleBody(std::array<double, SimpleBody::varCount> inputArray ) {
    //Assign var1
    MyClass::var1= inputArray[0];
    //Assign var2
    MyClass::var2= inputArray[1];
};

SimpleBody::~SimpleBody() {
    //Add in code here when children need deleting
}; 

入口点

// EntryPoint.cpp
//

#include "stdafx.h"
#include "MyClass.hpp"
#include <array>
#include <memory>

int main()
{
    //Create an array with a smart pointer for memory management
    std::unique_ptr< std::array<double, MyClass::varCount> > initArray =
        std::make_unique< std::array<double, MyClass::varCount> >();
    //Define values
    *initArray = { 1.0,2.0 };
    //Use array to create object
    std::shared_ptr<MyClass> object = std::make_shared<MyClass>(*initArray );

    //Free memory
    initArray.reset();
    object.reset();

    return 0;
}

最佳答案

在您的示例中,您可以跳过唯一指针,因为无论如何您只需要值

int main()
{
    std::array<double, MyClass::varCount> initArray = { 1.0,2.0 };
    std::shared_ptr<MyClass> object = std::make_shared<MyClass>(initArray );
    return 0;
}

这会做同样的事情。

对于“不那么臃肿”:

总是有auto:

int main()
{
    auto initArray = std::make_unique< std::array<double,  MyClass::varCount> >();
    *initArray = {1.0,2.0};
    auto object = std::make_shared<MyClass>(*initArray );
    return 0;
}

关于c++ - Std::Array with unique_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39575000/

相关文章:

c++ - GDB:如何找到已加载符号(symbols,symbols,symbols)的内存总大小?

c++ - 初始化多维数组

arrays - 多维数组如何在PowerShell中工作?

Java字符串分割成数组,我应该存储在变量中吗?

c++ - 相同类型重新定义的 Clang typedef(和别名)导致意外错误

c++ - 无法为 GCC 128 位整数重载 std::abs()

c++ - Linux创建独立进程

c++ - 线程池共享资源锁定问题

java - 根据位置将 ArrayList 修剪为一组数字

c++ - 专用于子项的父可变函数模板