Situation:
I have a simple struct that, say, holds a color (R, G, and B). I
created my own constructors to ease its creation. As a result, I lose
the default constructor. I dislike this, but it's easy to solve: I
just make my own default constructor.
Problem:
My own default constructor is considered to be *initializing the
variable* (even though it doesn't), whereas the original one does
not. Thus, when I declare and use it before initializing it, the
compiler no longer warns me.
Question:
Are there any compiler settings (even compiler specific ones; I am
using MSVC++) that state MY default constructor behaves exactly like
the regular default constructor?
Thanks for your time,
Jason
P.S. My default constructor could initialize the variable to all 0's,
but this has two unwanted effects: 1. It slows down code in which
this initialization needn't occur. 2. It potentially hides bugs that
would show up if it were left uninitialized as it should be. (This is
similar to how MSVC++'s debugger initializes all variables to 0, which
is silly, since it should initialize them to randomness -- as will
happen in the release build -- to make bugs appear as quickly as
possible). 10 1908
Jason Doucette wrote:
Situation:
I have a simple struct that, say, holds a color (R, G, and B). I
created my own constructors to ease its creation. As a result, I lose
the default constructor. I dislike this, but it's easy to solve: I
just make my own default constructor.
Problem:
My own default constructor is considered to be *initializing the
variable* (even though it doesn't), whereas the original one does
not. Thus, when I declare and use it before initializing it, the
compiler no longer warns me.
That's your choice, isn't it? You've chosen to implement your c-tor
(which is supposed to initialise the members) in such a way that does
*not* do what it promises to do. So, why are you complaining? It is
not a problem, or at least it's very easy to solve, isn't it?
>
Question:
Are there any compiler settings (even compiler specific ones; I am
using MSVC++) that state MY default constructor behaves exactly like
the regular default constructor?
Not that I know of.
>
Thanks for your time,
Jason
P.S. My default constructor could initialize the variable to all 0's,
but this has two unwanted effects: 1. It slows down code in which
this initialization needn't occur.
Can you share the numbers, how much *does* it actually "slow down
the code"?
2. It potentially hides bugs that
would show up if it were left uninitialized as it should be.
Written *correctly* it _prevents_ bugs, not hides them.
(This is
similar to how MSVC++'s debugger initializes all variables to 0, which
is silly, since it should initialize them to randomness -- as will
happen in the release build -- to make bugs appear as quickly as
possible).
Not similar at all. When in the "debug" build variables are given
some values whereas in the "non-debug" they are not, you have a very
big problem if your code ever depends on this. When your default
c-tor initialises member variables (to 0 or whatever) *always*, there
is no randomness, and you can *rely* on the initialisation happening.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
On Mon, 7 Apr 2008 12:07:03 -0700 (PDT), Jason Doucette
<jd*******@gmai l.comwrote:
>Situation: I have a simple struct that, say, holds a color (R, G, and B). I created my own constructors to ease its creation. As a result, I lose the default constructor. I dislike this, but it's easy to solve: I just make my own default constructor.
Problem: My own default constructor is considered to be *initializing the variable* (even though it doesn't), whereas the original one does not. Thus, when I declare and use it before initializing it, the compiler no longer warns me.
Question: Are there any compiler settings (even compiler specific ones; I am using MSVC++) that state MY default constructor behaves exactly like the regular default constructor?
No.
>P.S. My default constructor could initialize the variable to all 0's, but this has two unwanted effects: 1. It slows down code in which this initialization needn't occur.
Almost certainly by an imperceptible degree.
>2. It potentially hides bugs that would show up if it were left uninitialized as it should be. (This is similar to how MSVC++'s debugger initializes all variables to 0, which is silly, since it should initialize them to randomness -- as will happen in the release build -- to make bugs appear as quickly as possible).
The debugger doesn't do that, and AFAIK, never has. (I've been hearing this
for many years, and I still don't know how this rumor got started.) When
certain debug options are in effect, the compiler will initialize locals to
certain non-zero patterns.
--
Doug Harrison
Visual C++ MVP
On 2008-04-07 15:19:10 -0400, "Victor Bazarov" <v.********@com Acast.netsaid:
Jason Doucette wrote:
>Question: Are there any compiler settings (even compiler specific ones; I am using MSVC++) that state MY default constructor behaves exactly like the regular default constructor?
Not that I know of.
For the future, though, C++0x will let you do this:
struct S
{
S() = default;
S(int);
};
with the effect that the compiler will generate that default
constructor as if you hadn't declared the other one.
--
Pete
Roundhouse Consulting, Ltd. ( www.versatilecoding.com) Author of "The
Standard C++ Library Extensions: a Tutorial and Reference
( www.petebecker.com/tr1book)
P.S. *My default constructor could initialize the variable to all 0's,
but this has two unwanted effects: *1. It slows down code in which
this initialization needn't occur.
Almost certainly by an imperceptible degree.
Agreed.
2. It potentially hides bugs that
would show up if it were left uninitialized as it should be. *(This is
similar to how MSVC++'s debugger initializes all variables to 0, which
is silly, since it should initialize them to randomness -- as will
happen in the release build -- to make bugs appear as quickly as
possible).
The debugger doesn't do that, and AFAIK, never has. (I've been hearing this
for many years, and I still don't know how this rumor got started.) When
certain debug options are in effect, the compiler will initialize locals to
certain non-zero patterns.
You are quite right. MSVC++ sets them all to C's in hex, so you can
easily see that they are uninitialized in the debugger window. I
already knew this, as I tested it with a function I made to show the
bits of any data type, so I don't know why I keep thinking they are
set to 0.
Jason
For the future, though, C++0x will let you do this:
>
struct S
{
S() = default;
S(int);
};
with the effect that the compiler will generate that default
constructor as if you hadn't declared the other one.
Wow, Pete, that's cool. C++0x is the planned new C++ standard, so, I
guess I'm not the only one who wants this functionality.
Jason
Jason Doucette wrote:
>>P.S. My default constructor could initialize the variable to all 0's, but this has two unwanted effects: 1. It slows down code in which this initialization needn't occur.
Almost certainly by an imperceptible degree.
Agreed.
>>2. It potentially hides bugs that would show up if it were left uninitialized as it should be. (This is similar to how MSVC++'s debugger initializes all variables to 0, which is silly, since it should initialize them to randomness -- as will happen in the release build -- to make bugs appear as quickly as possible).
The debugger doesn't do that, and AFAIK, never has. (I've been hearing this for many years, and I still don't know how this rumor got started.) When certain debug options are in effect, the compiler will initialize locals to certain non-zero patterns.
You are quite right. MSVC++ sets them all to C's in hex, so you can
easily see that they are uninitialized in the debugger window. I
already knew this, as I tested it with a function I made to show the
bits of any data type, so I don't know why I keep thinking they are
set to 0.
The reason that MSVC sets them to all 0xcc is not for easy visibility
(though that's a nice side-benefit). It's because 0xcc is the INT3
opcode in x86, which breaks to the debugger.
The reason that MSVC sets them to all 0xcc is not for easy visibility
(though that's a nice side-benefit). *It's because 0xcc is the INT3
opcode in x86, which breaks to the debugger.
Ah! Thanks! :)
Jason
red floyd wrote:
Jason Doucette wrote:
>>>P.S. My default constructor could initialize the variable to all 0's, but this has two unwanted effects: 1. It slows down code in which this initialization needn't occur. Almost certainly by an imperceptible degree.
Agreed.
>>>2. It potentially hides bugs that would show up if it were left uninitialized as it should be. (This is similar to how MSVC++'s debugger initializes all variables to 0, which is silly, since it should initialize them to randomness -- as will happen in the release build -- to make bugs appear as quickly as possible). The debugger doesn't do that, and AFAIK, never has. (I've been hearing this for many years, and I still don't know how this rumor got started.) When certain debug options are in effect, the compiler will initialize locals to certain non-zero patterns.
You are quite right. MSVC++ sets them all to C's in hex, so you can easily see that they are uninitialized in the debugger window. I already knew this, as I tested it with a function I made to show the bits of any data type, so I don't know why I keep thinking they are set to 0.
The reason that MSVC sets them to all 0xcc is not for easy visibility
(though that's a nice side-benefit). It's because 0xcc is the INT3
opcode in x86, which breaks to the debugger.
As well as being an invalid pointer (it's in the top 1GB of address space
which is reserved for the kernel, attempts to access it from user-mode will
cause an access violation).
On Apr 8, 3:04 pm, red floyd <no.s...@here.d udewrote:
Jason Doucette wrote:
>P.S. My default constructor could initialize the variable to all 0's, but this has two unwanted effects: 1. It slows down code in which this initialization needn't occur.
Almost certainly by an imperceptible degree.
Agreed.
>2. It potentially hides bugs that would show up if it were left uninitialized as it should be. (This is similar to how MSVC++'s debugger initializes all variables to 0, which is silly, since it should initialize them to randomness -- as will happen in the release build -- to make bugs appear as quickly as possible).
The debugger doesn't do that, and AFAIK, never has. (I've been hearing this
for many years, and I still don't know how this rumor got started.) When
certain debug options are in effect, the compiler will initialize locals to
certain non-zero patterns.
You are quite right. MSVC++ sets them all to C's in hex, so you can
easily see that they are uninitialized in the debugger window. I
already knew this, as I tested it with a function I made to show the
bits of any data type, so I don't know why I keep thinking they are
set to 0.
The reason that MSVC sets them to all 0xcc is not for easy visibility
(though that's a nice side-benefit). It's because 0xcc is the INT3
opcode in x86, which breaks to the debugger.
Since this is usually stack or heap memory, why would INT 3 be
significant? It's not likely to be executed. Deleted memory is set to
0xdd in memory and I've also seen 0xcd used for other states. Here's a
link: http://www.docsultant.com/site2/arti...bug_codes.html
--
Paul This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Adrian Parker |
last post by:
For some reason when I call validateFields before .Update (see below), I get
this error: "Consumer's even handler called a non-reentrant method in the
provider"
However if I comment out the call to validateFields, all is fine.
What could possibly cause this error? What is a non-reentrant method?
|
by: mirnazim |
last post by:
Hi,
There are great Python Web Application Framework. But most of them are
meant for content oriented web apps.
Is there something that can ease the development of application that
are not content oriented(I call them "NON CONTENT-ORIENTED WEB
APPLICATIONS" because I don't know what else to call them). I mean the
applications like, accounting, high volume data entry apps, where
normally GUI clients have ruled. I know very high...
|
by: JKop |
last post by:
Would you classify the following code as "Undefined Behaviour" or as "Non-
portable"?
signed main()
{
signed char chedder = 130;
}
Relevant information:
|
by: Mat DeLong |
last post by:
Can someone explain this error to me? :
main.cpp:9: instantiated from `void show(const LIST::List<T>&) '
main.cpp:23: instantiated from here
list.cpp:58: error: dependent-name `LIST::List<T>::ListIterator' is parsed
as a non-type, but instantiation yields a type
..........
This is the first part of the main:
|
by: Sander Tekelenburg |
last post by:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
The HTML specs speak of "replaced" and "non-replaced" elements, yet
for the life of me I can't find an explanation of what "replaced" is
supposed to mean in this context. Can someone explain?
TIA
| |
by: Robert Oschler |
last post by:
I have a database table with a field that is indexed as a "full-text"
search, since I want the capabiity. However, I also want the ability to
quickly retrieve records from that table that are ins "sorted-order" by this
very same field.
Do I still need to create a "regular" non-full-text search index to have
this capability? Or will the "full-text" index be sufficient?
Thanks.
|
by: thorax |
last post by:
I'm having problems running a release build of an
application. The application is a native C++ .NET 2003
MFC application which links to a number of other DLLs,
one of which is mixed (SLGSE.dll) (VB.NET/C++). Most of
the DLLS are statically linked to the main exe (directly
or indirectly) but a few are dynamically linked at
runtime.
When I try and run the app, it gets "An unhandled non-
continuable exception was thrown during process...
|
by: Benton |
last post by:
Hi there,
I have a text box which will receive its value from a pop-up date picker.
The user should not be able to edit this field with the keyboard or mouse.
I am using ASP.NET. If I set the readonly property of the textbox to true,
it won't let the user change it and it can receive its value from the pop-op
calendar, just what I need. Problem is, after a postback, value is lost.
So I think Javascript may come to the rescue here. Is...
|
by: Pierre Barbier de Reuille |
last post by:
Hi,
after reading the article " The Standard Librarian : Defining Iterators
and Const Iterators" from Matt Austern:
http://www.ddj.com/showArticle.jhtml;jsessionid=41JODBZDWEMBYQSNDLOSKH0CJUNN2JVN?articleID=184401331
I wanted to test using the non-template function friends of template
classes. So I devised this code:
===8<======8<======8<======8<======8<======8<======8<===
|
by: =?Utf-8?B?QWxleCBNYWdoZW4=?= |
last post by:
Hi. I have Mobile site that I'm building. My problem is that all of my pages
are built as Mobile ASPX pages, but occasionally, I need to use controls
which are not mobile. Most specifically, the "FileUpload" control. Now, most
phones don't support this feature, but some do and for them I need to place
and use this control. How can I insert a FileUpload control on a Mobile ASPX?
Alex
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
|
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |