Во-первых, я знаю об уникальных_ptr и share_ptr, но Я не использую C++ 11, и поэтому я не могу их использовать.Как показать, что вы передали право собственности на указатель
Все возможные исследования от google возвращают решение с использованием этих двух интеллектуальных указателей. Я бы хотел одного.
Мне нужно передать право собственности на указатель на другой класс через конструктор.
PointerToPass* myPointer = new PointerToPass();
MyClass* myClass = new MyClass(myPointer);
Так что я мог бы использовать необработанные указатели, но я читал везде, что я должен его избегать.
Использование ссылки не является вариантом.
я мог бы использовать смарт-указатель от Qt, чтобы показать, что я прохожу собственность как так:
QScopedPointer<PointerToPass> myPointer(new PointerToPass());
MyClass* myClass = new MyClass(myPointer.take());
Этот вариант ясно показывает, что указатель передается и что собственность отдается MyClass, даже если он по-прежнему с помощью необработанные указатели.
Есть ли лучший способ передать эту идею?
Было бы даже лучше, если бы это можно было увидеть в сигнатуре конструктора MyClass.
Вы не должны использовать 'new' из копии' take'. 'take' сбрасывает область действия ptr в null. – chris
Да, но в этой области я больше не использую myPointer. Он используется только в MyClass после его передачи. – dyesdyes
Почему не 'новый MyClass (новый PointerToPass());'? Или, если это так, если тип указателя не принимает никаких аргументов, просто позвольте 'MyClass' ctor выделить его. –