new
またはスマートポインタがメモリのサイズを必要とすると思います。クラスにstringが含まれている場合は、そのクラスを割り当てます。次に、文字列に新しい値を割り当てます。それはメモリ上にありますか?この例では文字列を含む新しいクラスへのポインタを作成する
// a.hpp
#include <string>
#include <memory>
#include <armadillo>
class A {
public:
A(const std::string &);
private:
struct Impl;
std::shared_ptr<Impl> impl;
};
// a.cc
struct A::Impl {
Impl(const std::string &f)
{
// read config file and get name and size of x
name = "abc";
x.zeros(2, 3);
}
std::string name;
arma::mat x;
};
A::A(const std::string &f):
impl(std::make_shared<Impl>(f)) {}
、私は私だけN
メモリを割り当てると思いますが、私はN+M
メモリを使用します。それは危険ですか?
'std :: string'は、値を格納するために必要なメモリを割り当てます。それが終わったら解放してください。何もする必要はありません。 –
オブジェクトをスタックまたはヒープ上に作成する場合、Bo Perssonはstringのコンストラクタは、デフォルトの初期化または文字列の提供を問わず、文字列オブジェクトの初期化を行う方法を問わずメモリを割り当てます。値を変更すると、後でメモリが再割り当てされます。あなたが再配分の問題を気にするかどうかは、あなた次第です。私が間違っているなら、誰かが私を修正してください。 – TimLayne
あなたはコンストラクタを提供していましたが、Pimplの構造体のためのデフォルトのコンストラクタは提供されていなかったので、その値を割り当てておく必要があります。 – TimLayne