- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有三个类(class):A、B、C
在 A 类中有一个 vector<vector<B>>
在 C 类中有一个 vector<unique_ptr<B>>
C vector 中的 ptrs 简单地指向 A 类中 2d vector 的元素。
我只想要对这些元素的引用,我不想用这些指针创建新内存(不确定 unique_ptr 是否正在这样做)。
在这种情况下,我只使用原始指针会更好吗?
编辑:我不希望我指向的对象在删除 vector 时被删除(当指针超出范围时)
最佳答案
你不能(好吧,除非你喜欢破坏所有东西,否则不应该)使用 unique_ptr
引用未通过 new
分配的对象(或隐式地通过 std::make_unique
)。
除非您完全初始化 A
,否则使用原始指针也不是一个特别好的主意。的二维 vector
初始化前C
的,然后再不调整它的大小;调整大小会使您的指针无效,如果您尝试从中读取它们,则会导致未定义的行为。
我会推荐 2 个选项中的 1 个,具体取决于哪种方案最适合您的情况:
使用 vector<vector<std::shared_ptr<B>>>
在A
(用通过 std::make_shared
分配的类型填充它)并生成 C
的 vector
vector<std::shared_ptr<B>>
(如果从 A
中删除应该不会影响 C
并且不涉及引用循环)或 vector<std::weak_ptr<B>>
(如果从 A
中删除应该删除 C
中的引用)
如果 C
指向 A
中的逻辑索引(更改 A
的 vector
中的值应该改变通过 C
看到的内容),更改 C
举行:
一个。对 A
的引用的 vector
(或 A
本身)
vector<std::pair<size_t, size_t>>
每个pair
定义用于在 A
中查找关联值的索引的 vector
.
选项 2 表示 A
如果有的话,不必做太多改变(除了确保 C
可以看到它的 vector
); vector
仍然是基于值的,所以在其中使用一个值仍然只有两个随机访问间接,而不是使用 shared_ptr
时所需的 3-4 个(std::make_shared
意味着它实际上是 3,手动调用 new
和 std::shared_ptr
是 4)。
关于c++ - 如果我不想管理我指向的对象的内存,我应该使用 unique_ptr 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47585876/
我的应用程序中有一个 IList 站点,并且站点有大量属性。 我想将此列表转换为 JSON,以便在类似于此的下拉列表中使用 var sites = SiteRepository.FindAll
我正在将一些代码从 bluebird 切换到原生 Promises,并且我对原生 promises 吞下错误这一事实感到相当恼火,即使没有定义 .catch() 也是如此。它使调试变得不可能,除非您在
在同步访问共享资源时,是否有理由不使用读/写锁而不是普通的互斥锁(基本上只是写锁),除了它具有比我可能需要的更多功能的哲学原因? 换句话说,如果我只是默认使用读/写锁作为我首选的同步结构,我是不是在踢
我刚进入这个元素,代码已经写好了,但我们发现了一个问题。当您单击菜单中的任何位置时,它会变成金色,您看不到菜单该部分中的任何链接。您可以再次单击它,它将返回到正常状态。这只发生在 Internet E
这是一个简单的类和简单的测试函数: #include #include namespace { using namespace std; } class NameStream {
我有一个 std::vector其中 Foo是一个包含 Foo( Foo&& ) noexcept 的类. 向容器中添加对象完美无缺,但是使用 std::vector::erase( iterator
我正在通过这段代码使用各种浏览器尝试 localStorage 和 JSON: function getStorage() { stored = JSON.pa
您可能认为此问题与 Running two projects at once in Visual Studio 完全相同.不完全是,恰恰相反。 我有一个带有两个 MVC3 项目的 VS 2010 解决
我正在制作一个网站:http://arc-angyal.hu/ 我的第一个问题是,我无法让左侧的红色 div 足够高以填充页眉和页脚之间的空间。它位于标题之后和导航之前。我已经设置: html, bo
根据 This Question ,我正在使用线程来终止用户输入的函数。我的代码看起来像: bool stopper = false; thread stopThread(userStop, &sto
我是一名优秀的程序员,十分优秀!