Я новичок в использовании интеллектуальных указателей в C ++, и моя текущая проблема заключается в том, что я конвертирую код C в C ++ (C ++ 11/14/17), и у меня возникают некоторые проблемы с пониманием использования shared_ptr с указателем на указатель.Я получил игрушечный пример, который, как мне кажется, иллюстрирует проблему
Ниже приведен заголовочный файл
#include <memory>
using std::shared_ptr;
struct DataNode
{
shared_ptr<DataNode> next;
} ;
struct ProxyNode
{
shared_ptr<DataNode> pointers[5];
} ;
struct _test_
{
ProxyNode** flane_pointers;
};
И фактический код test.cpp
#include <stdint.h>
#include "test.h"
shared_ptr<DataNode> newNode(uint64_t key);
shared_ptr<ProxyNode> newProxyNode(shared_ptr<DataNode> node);
int main(void)
{
// Need help converting this to a C++ style calling
ProxyNode** flane_pointers = (ProxyNode**)malloc(sizeof(ProxyNode*) * 100000);
// Here is my attempt (incomplete)
ProxyNode** flane_pointers = new shared_ptr<ProxyNode> ?
shared_ptr<DataNode> node = newNode(1000);
flane_pointers[1] = newProxyNode(node)
}
shared_ptr<ProxyNode> newProxyNode(shared_ptr<DataNode> node)
{
shared_ptr<ProxyNode> proxy(new ProxyNode());
return proxy;
}
shared_ptr<DataNode> newNode(uint64_t key)
{
shared_ptr<DataNode> node(new DataNode());
return node;
}
Яполучение этих ошибок компилятора -
test.cpp: In function ‘int main()’:
test.cpp:12:42: error: cannot convert ‘std::shared_ptr<ProxyNode>’ to ‘ProxyNode*’ in assignment
flane_pointers[1] = newProxyNode(node)
Скомпилировано с
g++ -c -g test.h test.cpp
g ++ версия 7.3.0 (в Ubuntu 18)
Мне нужна помощь в преобразовании malloc в стиле CВыделение в стиле C ++ с вызовом указателя на указатель и последующим исправлением ошибок компилятора.Приношу свои извинения, если мне кажется, что я упускаю что-то очевидное.