私はこれについてたくさん検索しました。しかし、私は言い回しを正しく理解していないかもしれません。
検討、
Class A {};
Class B {
public:
A* getA();
void setA(A *aVarParam);
private:
A *aVar;
};
ここで、aVar はクラス BI のメンバー変数であるため、クラス B の対応するオブジェクトが存在する限り、aVar が存続することを保証したいと考えています。
ここに表示されるオプションは
- aVarParam のディープ コピーを作成し、それへのポインターを保持します。
- Boost共有ポインタのようなものを使用してください。
どちらも手間がかかりすぎるか、構文が醜いようです。ここで何か不足していますか?すべての C++ プログラムは、これら 2 つのオプションのいずれかを使用しますか?
詳細説明:
多くの人が、私がどのように使用しているかの例を見たいと思っていました。実際、私は汎用目的の戦略のような答えが欲しかった. したがって、元の例。これが私が使用しようとしている例です:
#ifndef DBSCHEMA_H
#define DBSCHEMA_H
#include <string>
#include <vector>
#include "dbtable.h"
namespace models {
class DbSchema
{
public:
explicit DbSchema();
boost::shared_ptr<std::string> getSchemaName() const;
void setSchemaName(const boost::shared_ptr<std::string> schemaName);
std::vector<models::DbTable> getTableList() const;
void setTableList(const std::vector<models::DbTable> tableList);
private:
boost::shared_ptr<std::string> schemaName_;
std::vector<models::DbTable> tableList_;
};
}
#endif // DBSCHEMA_H
ここでは、クラス DbSchema が、UI (QT アプリケーション) を指示するシン モデルとして使用されています。また、さまざまなデータベースと実際に通信して、UI が使用する DBSchema オブジェクトを埋める多くのスキーマ ビルダーが存在します。
私が達成しようとしていることについて、これが明確になることを願っています。私は C++ プログラマーではありません。Java、Objective-C、PHP、JavaScript を何年もプログラミングした後、「本物の C++」アプリケーションを書きたいという欲求を満たそうとしています。