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 Persans가 string 생성자에서 문자열 초기화를 제공하는지 또는 문자열을 제공하는지 여부와 상관없이 문자열 객체에 대한 메모리를 할당하는 방식에 관계없이 스택 또는 힙 중 어느 것이 든 객체를 만들 때. 값을 변경하면 나중에 메모리가 재 할당됩니다. 재배치 문제에 관심이 있는지 여부는 당신에게 달린 것입니다. 내가 틀렸다면 누군가는 나를 바로 잡으십시오. – TimLayne
Pimpl 구조체에 대한 생성자 및 기본 생성자를 제공하지 않았으므로 할당 할 값을 제공해야합니다. – TimLayne