2015-04-02 6 views
1

Сначала я использовал flyweight для строки, которая отлично работает, но когда я использую flyweight для структуры. он не работает. первого испытания для струны:boost :: 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; 
} 

затем я определил структуры А, некоторые свойства в я использовал муху. 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; 
    } 

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

+0

Вы даже не показывают 'STRUCT Ā'. Мы не психические – sehe

ответ

1

Во-первых:

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

Это: Most vexing parse: why doesn't A a(()); work?


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

Live On Coliru

#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:

enter image description here

+0

Спасибо, я попробую еще раз. – ideasky

+0

Приветствия, добро пожаловать в SO. Пожалуйста, не забудьте [проголосовать, если ответ был полезен] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) или сообщить нам, что вы застряли с , – sehe