boost :: flyweight не работает для класса

Сначала я использовал flyweight для строки, которая отлично работает, но когда я использую flyweight для структуры. это не работает
первый тестовый пример для строки:

static void testflyweightString()
{
char tmp[0];
vector<boost::flyweight<string>> boost_v;
for(int i=0;i<10000000;i++)
{
sprintf(tmp,"zws_%d",i/1000);
boost_v.pushback(boost::flyweight<string>(tmp));
}
return;
}

затем я определил структуру A, некоторые свойства в A я использовал навесной вес.
testcase2 как показано ниже:

static void testflyweightA()
{
vector<A> boost_v;
for(int i=0;i<10000000;i++)
{
A a();//here new some A;
boost_v.pushback(a);
}
return;
}

но это не имеет никакого изменения для используемой памяти, независимо от того, использовал я навесной вес в А или нет.

1

Решение

Прежде всего:

    A a();//here new some A;

Это: Самый неприятный разбор: почему не A a (()); Работа?


Я подготовил эту тестовую программу:

Жить на Колиру

#include <boost/flyweight.hpp>
#include <vector>
#include <iostream>

static void testflyweightString() {
std::cout << __FUNCTION__ << "\n";
std::vector<boost::flyweight<std::string> > boost_v;
for (int i = 0; i < 10000000; i++) {
boost_v.emplace_back("zws_" + std::to_string(i/1000));
}
}

struct A {
boost::flyweight<std::string> s;
A(std::string const& s) : s(s) { }
};

static void testflyweightA() {
std::cout << __FUNCTION__ << "\n";
std::vector<A> boost_v;
for (int i = 0; i < 10000000; i++) {
boost_v.push_back("zws_" + std::to_string(i/1000));
}
}

int main() {
testflyweightString();
testflyweightA();
std::cout << "Done\n";
}

Его использование памяти выглядело нормально, используя valgrind --tool=massif:

введите описание изображения здесь

1

Другие решения