473,545 Members | 289 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Can't work with volatile objects?

The canonical way to write a copy-constructor is:

MyClass::MyClas s(MyClass const&);

I've been wondering, however, if that should be:

MyClass::MyClas s(MyClass const volatile&);
?

Just in case more type specifiers come into the language, we could have a
template such as the following:

template<class Param>
class Strict {
private:
Strict(); /* Can't create an object */

public:

typedef Param const volatile T;
};

, and then have function arguments such as:

MyClass::MyClas s(Strict<MyClas s>::T &)
{

}

The following code demonstrates how volatile objects aren't catered for:

#include <cstddef>
#include <algorithm>

using std::size_t;
using std::copy;

class MyClass {
private:

typedef int T;

size_t const static len = 10;

T *p;

public:

MyClass() : p(new T[len]) {}

MyClass(MyClass const &from) : p(new T[len])
{
copy(from.p,fro m.p + len,p);
}

MyClass &operator=(MyCl ass const &from)
{
copy(from.p,fro m.p + len,p);
return *this;
}

~MyClass()
{
delete [] p;
}
};

int main()
{
MyClass const volatile obj1;

MyClass obj2(obj1); /* Can't copy */
}
(I just used copy-constructors as an example -- it could be any function:

void Func(MyClass const &);

--

Frederick Gotham
Aug 18 '06 #1
1 1717

Frederick Gotham wrote:
The canonical way to write a copy-constructor is:

MyClass::MyClas s(MyClass const&);

I've been wondering, however, if that should be:

MyClass::MyClas s(MyClass const volatile&);
No. That would force the implementation to use volatile sematics even
if
the copied object isn't volatile. Forcing const sematics usually has no
performance overhead, so there is little reason to overload the copy
ctor
with a non-const overload. If you need volatile, add it as an overload,
but
keep the efficient non-volatile one.

HTH,
Michiel Salters

Aug 18 '06 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

8
397
by: David Rasmussen | last post by:
What is the difference in meaning and in consequences between struct S { volatile A* a; }; and struct S
3
8313
by: Mark A. Odell | last post by:
If I have a structure that may point to a volatile "region (e.g. device)" or a context in memory what would be the best way to use the volatile keyword? E.g. a) volatile on struct objects struct Foo {
17
2318
by: dingoatemydonut | last post by:
The C99 standard states: "In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no needed side effects are produced (including any caused by calling a function or accessing a volatile object)."...
3
5190
by: nickptar | last post by:
Let's say I have a situation like this: /* begin example.c */ static int* ptr; static void inner_fn(void) { *ptr = 1; }
9
5806
by: d.f.s. | last post by:
In the post below, 'copy constructor?', the answers refer to an object declared as const volatile. Now I'm confused. Are those terms not mutually exclusive? const='Hey compiler! This is not going to change so generate your code based on that assumption.' volatile='Hey compiler! This is going to change so generate your code based on that...
17
2087
by: Grizlyk | last post by:
Hello. What can be optimised in C++ code and how i can garantee stable behaviour below 1. Are expression "auto volatile" can deny removing as "unused temporary" like this: auto volatile const class_name tmp;
4
1749
by: Shraddha | last post by:
What does volatile keyword actually used for?
3
3588
by: Rakesh Kumar | last post by:
Hi - I am actually trying to get my feet in multi-threaded C++ programming. While I am aware that the C++ standard does not talk about threads (at least, for now - in C++03) - my question is more about the language / usage rather than any thread specific question. Sorry - if posted my mistake. I understand that in C++ volatile objects (...
8
1409
by: Markus | last post by:
Hello everyone. Recently I stumbled upon an interesting problem related to thread-parallel programming in C (and similarily C++). As an example assume a simple "buffer" array of size 8, e.g. with static lifetime and exteral linkage. One thread fills the buffer structure, and the other in some way evaluates its contents, e.g. do {...
0
7465
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
0
7398
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...
0
7656
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
0
7805
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7416
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...
0
7752
tracyyun
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...
1
5325
isladogs
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...
0
4944
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...
1
1878
by: 6302768590 | last post by:
Hai team i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.