gpt4 book ai didi

c++ - 创建自定义标准流实现时的编译器警告

转载 作者:太空狗 更新时间:2023-10-29 21:28:27 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C++ 应用程序,我在其中创建了自定义 streambuf 和流实现。我使用了 Angelika Langer 给出的方法用于创建下面详述的流:

class MyOutputStream_3 : private MyStreamBuf, public ostream {
public:
MyOutputStream_3() : ostream((MyStreamBuf*) this), ios(0) {};
virtual ~MyOutputStream_3() { sync(); }
// ...
};

但是,Visual Studio 给了我一个 warning :

warning C4355: 'this' : used in base member initializer list

代码工作正常,但我担心编译器会通知我我所做的在某些情况下可能会中断或者可能不可移植。

在这种情况下,这是我可以忽略的事情吗?或者我应该怎么做才能解决我的问题?

最佳答案

它警告您在初始化列表中使用 this 因为从技术上讲,this 还不存在,因为构造函数还没有完成执行(也没有任何成员对象的构造函数)并将其传递给函数可能会在他们尝试使用该对象(包含未调用其构造函数的对象)时导致问题。

如果您只是存储指针供以后使用,那么代码应该可以工作。但是,当您返回这段代码并忘记您不应该使用该指针时,您可能会犯错误并且无法解释您的程序崩溃的原因。

这是该警告的 Microsoft 页面:http://msdn.microsoft.com/en-us/library/3c594ae3.aspx

关于c++ - 创建自定义标准流实现时的编译器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932243/

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