Задать вопрос
Dyikot
@Dyikot

Насколько больше будет занимать памяти Свойство (get + set)?

Реализовал свойство. Одно свойтсво занимает 136 байт (при наведении на него в Visual Studio). Так вот будет ли большая разница если я просто сделаю функцию get + set? А то в VS не считает функциии в памяти.
template<typename T>
class Property
{
private:
	T& _value;
public:
	std::function<void(const T&)> Set = [this](auto& value) { _value = value; };
	std::function<const T& ()> Get = [this]() -> auto { return (const T &)_value; };
public:
	Property(T& value):
		_value(value) {}

	void operator=(const T& value)
	{
		Set(value); 
	}

	const T* const operator->() const
	{
		return &Get();
	}
};
  • Вопрос задан
  • 106 просмотров
Подписаться 1 Простой 10 комментариев
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Ну так тут у вас функции тоже есть. Эти две ваших лябды окажутся какими-то фнукциями, которые компилятор куда-то засунет, и в классе к вас будут 2 переменные, хранящие адресс этих функций.

Если вы сделаете просто методы Get и Set, то будут точно такие же 2 функции в памяти. Важно, что в вашем текущем и в предолженном решении функции не храянятся в эксземплярах объекта. Обычно они в коде программы встречаются ровно по одному разу*.

*Если не учитывать инлайнинг функций. Иногда компилятор вместо вызова тупо вставлят тело функции в код. Но это не сильно увеличивает размер кода обычно. И никак не зависит от количества и размера объектов в памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mezastel
@mezastel
Финансовая математика, программирование
Если готовы использовать нестандартный С++, посмотрите на досуге на __declspec(property).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы