この質問をより明確にするために言い換えたいと思いました。私のアプローチは一般的に間違っていると感じています
新しい共有ポインターを作成してそれをベクトルにプッシュする目的で、共有ポインターのベクトルへの参照をコンストラクターに渡すという依存性注入の意図を破りますか?
新しいコマンドをオブジェクト内から使用するべきではないことを私は知っています。この例では、オブジェクトを作成しますが、外部に保存します。
「新しい」が外側にとどまることができるようにこれに近づくより良い方法はありますか?
SpottingMarker.h
#ifndef SPOTTINGMARKER_H_INCLUDE
#define SPOTTINGMARKER_H_INCLUDE
class SpottingMarker
{
public:
SpottingMarker() {;}
~SpottingMarker(){;}
void blah();
double mPosition;
double mDuration;
char* mDescription;
};
#endif
SpottingMarker.cpp
#include "SpottingMarker.h"
void blah() {;}
CsvSpottingNotes.h
#ifndef CSVSPOTTINGNOTES_H_INCLUDED
#define CSVSPOTTINGNOTES_H_INCLUDED
#include "SpottingMarker.h"
#include <boost/shared_ptr.hpp>
#include <vector>
typedef boost::shared_ptr<SpottingMarker> spottingMarker_ptr;
class CsvSpottingNotes
{
public:
CsvSpottingNotes(const char* filename, std::vector<spottingMarker_ptr> &SpottingMarkerSet);
~CsvSpottingNotes(){;}
const char* mFilename;
const char field_terminator;
const char line_terminator;
const char enclosure_char;
};
#endif
CsvSpottingNotes.cpp
#include "CsvSpottingNotes.h"
#include "SpottingMarker.h"
#include <csv_parser/csv_parser.hpp>
#include <boost/shared_ptr.hpp>
CsvSpottingNotes::CsvSpottingNotes(const char* filename, std::vector<spottingMarker_ptr> &SpottingMarkerSet) :
field_terminator(','),
line_terminator('\n'),
enclosure_char('"')
{
spottingMarker_ptr aSpottingMarker(new SpottingMarker());
SpottingMarkerSet.push_back(aSpottingMarker);
}
main.cpp
#include "CsvSpottingNotes.h"
#include "SpottingMarker.h"
#include <vector>
int main(int argc, char ** argv)
{
typedef boost::shared_ptr<SpottingMarker> spottingMarker_ptr;
const char* filename = "AT_92.csv";
std::vector<spottingMarker_ptr> spottingMarkerSet;
CsvSpottingNotes structure(filename, spottingMarkerSet);
}