C++,Shared_ptr,请告诉我为什么我的代码出现错误



获取错误-

1>C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.25.28610includememory(1143,17): message : could be 'std::shared_ptr<int> &std::shared_ptr<int>::operator =(std::shared_ptr<int> &&) noexcept'
1>C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.25.28610includememory(1132,17): message : or       'std::shared_ptr<int> &std::shared_ptr<int>::operator =(const std::shared_ptr<int> &) noexcept'
1>E:VSHelloWorldHelloWorldmain.cpp(14,10): message : while trying to match the argument list '(std::shared_ptr<int>, int *)'
1>Done building project "HelloWorld.vcxproj" -- FAILED.
#include <iostream>
#include <vector>
#include <algorithm>
#include<string>
#include  <memory>
using namespace std;
int main()
{
shared_ptr<int> ptr = make_shared<int>();
int l = 10;
ptr = &l;
cout << (*ptr) << endl;
cin.get();
}

您只能将另一个std::shared_ptr<>std::unique_ptr<>分配给类型为std::shared_ptr<>的变量,请参阅std::shared_ptr<>::operator=()的文档。这可以防止您在将指针分配给堆中未分配的变量时出错,就像您在代码中尝试的那样。

请注意,您对std::make_shared<int>()的调用已经为int分配了内存,为什么不使用它呢?

std::shared_ptr<int> ptr = std::make_shared<int>();
*ptr = 10;
std::cout << *ptr << 'n';

你甚至可以把它写得更短,避免重复:

auto ptr = std::make_shared<int>(10);
std::cout << *ptr << 'n';

如果您真的想为ptr分配另一个指针,那么您应该确保该指针也是共享的或唯一的,如下所示:

std::shared_ptr<int> ptr;
std::shared_ptr<int> l;
*l = 10;
ptr = l;
std::cout << *ptr << 'n';

相关内容

  • 没有找到相关文章

最新更新