назначение temp элементу const ref вызывает ошибку сегментации

лучше объяснить на примере:

ток.ч

#include <string>

static const char* defaultDelim = ".,;";

class Tokenizer {
public:
    Tokenizer():
        // 'delim' is the const ref member that is initialized by the temp string 
        delim( (altDelim.size())? altDelim : std::string(defaultDelim) ) 
    {}

    size_t scan(const std::string& str)
    { return str.find_first_of(delim); }

    static void setDelim(const std::string& d) { altDelim = d; }
private:
    static std::string altDelim;
    const std::string& delim;
};

main.cpp

#include <iostream>
using namespace std;

#include "tok.h"

std::string Tokenizer::altDelim;

int main()
{
    Tokenizer tok;

    size_t pos = tok.scan("hello, world");
    cout << pos << endl;
}

программа печатает 0, что неверно. Настоящий код получает ошибку seg.

Я ожидаю, что здесь будет соблюдаться правило продления срока службы временного объекта, назначенного константной ссылке, но, по-видимому, это не так. Вы знаете причину?

5
задан davka 7 July 2012 в 16:07
поделиться