У меня есть класс, который я хочу создать, передавая массив значений. Объект здесь имеет два члена, но это было уменьшено для иллюстрации. В будущем я буду читать значения с диска, а затем создать объект из этих значений, следовательно, массив. Объект будет иметь несколько указателей позже, следовательно, shared_ptr.Std :: Array with unique_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;
}
Я не могу сделать какой-то смысл вашего вопроса, но я думаю, что вам нужно потратить некоторое время на изучение основ C++ , – juanchopanza
вам не нужно вручную освобождать память уникального и общего ptr. Они сделают это сами. И вы всегда разбираете свой уникальный массив ptr. Вы можете просто сохранить его в стеке, а не создавать его в куче. – Hayt
Мой друг, который некоторое время работал разработчиком, сказал мне, что лучше явно освободить память, когда вы знаете, что вам это не нужно, а затем, когда вы забудете, функция smart_ptr может действовать как защитная сетка. Неужели он просто педантичен или есть времена, когда полагаться на smart_ptr на свободную память может вызвать утечку memroy? –