gpt4 book ai didi

c++ - 为什么有些图书馆提供无指针访问而其他图书馆不提供?

转载 作者:行者123 更新时间:2023-11-27 22:38:21 25 4
gpt4 key购买 nike

C++ 编程可以使用许多范例来完成。可以不使用指针、标准指针甚至智能指针。用于在屏幕上显示图形的主流库处理不同的情况。例如,在 SFML 中,可以不使用指针语法来创建新窗口,而在 Ogre3D 中则必须使用指针。

// SFML without pointer
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
// SFML with pointers
sf::Window* m_Window;
// Ogre3d with pointer
RenderWindow *renderWindow = root->createRenderWindow("Main",320,240,false);

总是可以使用指针,因为指针是更强大的概念。所以我的问题是:SFML 中的技巧是什么,他们可以为最终用户提供无指针 API,我们如何编写可以在没有指针的情况下实例化的类?或者没有指针是一个坏主意,SFML 是错误的,因为他们不推荐使用指针?

最佳答案

图形库有什么特别之处?

这里的问题是,图书馆如何支持所有权管理。处理原始指针可能会导致内存泄漏/死对象。因此,一些库的提供者将用户引导到他们自己的内存管理中。 gtkmm 有自己的智能指针,使用它们很常见。

It is always possible to use pointers,...

不!1)是不是总是可以的!如果库提供者保护构造函数并让您仅通过创建方法创建实例,您将无法获得库对象的原始指针!

, ...because pointers are the more powerful concept.

原始指针没有比智能指针或引用更强大的了。唯一不能直接完成的是使用虚拟调度。但这也可以在智能指针实现中进行管理。我认为没有理由接受你的陈述 ;)

... how can we write classes which can be instantiated without pointers?

您可以在没有指针的情况下实例化每个类。简单的

Type instanceVar{<Constructor Parms>}; 

会完成这项工作。无需使用 newnew@

Or is the absence of pointers a bad idea

不!如果有解决所有权问题的通用方法是个好主意。这可以在库内部容器中处理,智能指针是其他一些概念。

我个人的感觉是,我想决定如何使用图书馆。由于 c++ 仍然提供智能指针,我不想使用特定于库的指针。但是在智能指针成为 c++ 的一部分之前很久,很多通用库就已经开始开发了。所以他们仍然有自己的实现和自己的所有权管理。这是我不喜欢的东西,但这是我非常个人的观点,并且基于此观点!

关于c++ - 为什么有些图书馆提供无指针访问而其他图书馆不提供?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51377399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com