2014-12-31 3 views
5

В принципе, я пытаюсь сделать это:Есть ли способ инициализировать массив с буфером во время объявления?

char x[] = "hello"; 
char* y = new char[sizeof(x)](x); // won't work. 

demo

Есть ли способ сделать это чисто? Никаких комментариев о НЕ ИСПОЛЬЗУЙТЕ необработанные массивы или необработанные указатели.

+0

Что вы имеете в виду не использовать сырые массивы или сырые указатели? Разве это не то, о чем вы просите? – Daniel

+1

Если вы используете C++ 11, как предлагают теги, вы можете использовать [std :: array в порядке, показанном здесь] (http://stackoverflow.com/a/27708185/919747). –

+0

['std :: string'] (http://en.cppreference.com/w/cpp/string/basic_string) - это способ сделать это чисто. – 0x499602D2

ответ

4

Просто напишите функцию.

template<typename T, size_t N> 
T* new_array(T const(&arr)[N]) 
{ 
    T* p = new T[N]; 
    std::copy(std::begin(arr), std::end(arr), p); 
    return p; 
} 

int main() 
{ 
    char x[] = "hello"; 
    char* y = new_array(x); 
} 
+0

Конечно. * ударяет головой * – Adrian