crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> python std::shared_ptr clang++, не работает в clang++ :(
alexy
  опции профиля:
сообщение 11.1.2015, 21:16
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 4.8.2010
Пользователь №: 1931

Спасибо сказали: 0 раз(а)




Репутация:   0  


недавно обнаружил проблему (debian sid) с гццпп - он мне так подвешивает систему, что быстрее просто отправить в перезагрузку. решил воспользоватсья возможностью и перейти на clang :)

я для прототипа использую python3 и boost::python. кода импортируешь туда класс ,буст может импортировать его как boost::shared_ptr и управлять соответственно. я использую std::shaerd_ptr и вот код (это переделанный код из вики питона)
#include <string>
#include <memory>
#include <boost/python.hpp>

struct A {
        static std::shared_ptr<A> create () { ptr=std::shared_ptr<A>(new A); return ptr;}
        std::string   hello  () { return "Just nod if you can hear me!"; }
        ~A(){std::cout<<"dest"<<std::endl;}
        static std::shared_ptr<A> ptr;
};
std::shared_ptr<A> A::ptr;

using namespace boost::python;
BOOST_PYTHON_MODULE(sptr)
{
        class_<A, std::shared_ptr<A>>("A")
            .def("create",&A::create )
            .staticmethod("create")
            .def("hello",&A::hello)
       ;
}
в гцц усе работает. когда говоришь питону del a, где а - это переменная созданная из этого кода, объект не удаляется, он удаляется только при закрытии программы. если закоментировать ptr то объект удаляется сразу - что и требовалось доказать. но! кланг не может это скомпилить :(
что можно сделать чтобы заставить работать именного clang?

g++ --version 4.9.2-10
clang++ --version 3.5.0-9
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 14.1.2015, 13:20
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


Цитата(alexy @ 14.1.2015, 0:56) *
gcc не осилил скомпилить приведеннй код с этим примером

что-то у тебя неправильно установлено или проблемы с железом. компилятор может ругаться, но завешивать систему на таком примитиве он не может.

я не отслеживала самые последние изменения, но, по крайней мере, до версии 1.55.0 C++11 в бусте не использовался явно. главным образом потому, что буст сам по себе прототип стандартизации С++ и когда что-то становится стандартом, то буст пересматривается. а ещё потому, что С++11 с полным набором всех фич до сих пор не существует в некоторых компиляторах, которые буст поддерживает.

в последних версиях GCC (начиная с 4.7) для С++11 есть опция -std=c++11 (или -std=c++0x, начиная с GCC 4.3, но в старых версиях может быть далеко не полная поддержка фич C++11).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.4.2024, 16:37